簡體   English   中英

如何使RestController正確處理json字符串

[英]How to make RestController handle json Strings properly

如RFC 7159中所述,字符串等原始類型本身就是有效的json消息。 但字符串必須用雙引號括起來。

所以,字符串:

測試

在json是:

“測試”

如果我發送一個正確引用的POST正文

“測試”

到以下代碼

@RestController
@RequestMapping("test")
public class TestController{
    @RequestMapping(method=RequestMethod.POST)
    public ResponseEntity<?> userLogout(@RequestBody final String input) {
        System.out.println(input);
        return new ResponseEntity<>("OK", HttpStatus.OK);
    }
}

輸入變量的值是

“測試”

代替

測試

這將是正確的價值。

此外,請求的輸出是

代替

“好”

這將是正確的輸出。

任何想法如何強制Spring正確處理字符串?

請求確實有正確的標頭:

Content-Type:application / json; 字符集= UTF-8

並且在RequestMapping注釋中添加produce =“application / json”沒有幫助。

(只是旁注:如果您使用改裝或Gson進行通信,他們會正確處理字符串。)

String是Spring MVC的特殊類型。

在嘗試為@RequestBody注釋參數生成參數時,Spring MVC從默認或自定義HttpMessageConverter實現的列表中進行選擇。 其中兩個與您的示例相關(按此方式排序): StringHttpMessageConverterMappingJackson2HttpMessageConverter (或Gson等效項)。

StringHttpMessageConverter支持所有媒體類型,因此將用於從您的請求中讀取原始文本,即"test" ,並將該值作為參數提供。

您可以按所需順序提供自己的HttpMessageConverter對象列表。 如果首先放置MappingJackson2HttpMessageConverter ,那么它將能夠將您的JSON解析為String並生成String參數值test

如果您不想通過這些環節,您還可以將參數更改為與JSON字符串TextNode對應的Jackson類型,然后檢索其值。

@RequestMapping(method = RequestMethod.POST)
public ResponseEntity<?> userLogout(@RequestBody final TextNode input) {
    System.out.println(input.asText());
    return new ResponseEntity<>("OK", HttpStatus.OK);
}

這同樣適用於響應。 "OK"是一個String ,將使用StringHttpMessageConverter處理。 使用TextNode或重新排序HttpMessageConverter列表。

return new ResponseEntity<>(new TextNode("OK"), HttpStatus.OK);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM