2016-10-03 74 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'参数传递给您的处理程序方法。 –

相关问题