2016-10-03 41 views
0

我有一個標準的Spring 4 MVC應用程序。我有REST端點將ResponseBody json和映射到我的Java對象。這很好。如何在Spring註釋中獲得響應正文中的JSON

但現在我需要獲取原始JSON,因爲我沒有Java對象來映射它。我的端點如下所示:

@RequestMapping(value="", method = RequestMethod.POST) 
@ResponseBody 
public Object createObject(@RequestBody JsonObject objectJson) { 

當我將JSON POST到此端點時,我得到一個空的JSON字符串。該objectJson不爲空,但是當我調試這樣的:

System.out.println(objectJson.toString()); 

我得到:{}

當我改變了方法簽名:

public Object createObject(@RequestBody String objectJson) { 

我得到一個400「的客戶發送的請求在語法上不正確「

如何獲取要發送的JSON,可以是我可以手動解析的字符串,也可以是JsonObject和我可以使用的字符串?

+0

你試過這個解決方案:http://stackoverflow.com/ a/16467400/1545775? –

+0

RequestBody缺失@ – jmw5598

+0

JSON的外觀如何? – jmw5598

回答

-2

爲了使用@RequestBody接收JSON對象,您需要定義一個POJO類。假設你的原始JSON看起來像

{"id":"123", "name":"John"} 

的POJO看起來像

public class User { 
    private String id; 
    private String name; 

    ... 
    // setters and getters 
} 

控制器方法將

@RequestMapping(value="", method = RequestMethod.POST) 
@ResponseBody 
public Object createObject(@RequestBody User user) { 
    String id = user.getId(); 
    String name = user.getName(); 
    ... 
} 
+0

這是如何解釋爲什麼'toString()'返回'{}'或400錯誤的請求?假設他們正在使用Gson的'JsonObject'和'GsonHttpMessageConverter',這應該是開箱即用的。 –

+0

我從來沒有對JsonObject類型使用'@ RequestBody',它可能有效,但我不確定爲什麼toString()是空的。對於400個錯誤的請求,這是因爲預計會有JSON負載,但其類型是String。 –

+0

對於'String',默認情況下,Jackson應該使用'StringHttpMessageConverter',它將請求內容作爲文本並將其作爲'String'參數傳遞給您的處理程序方法。 –

相關問題