Java SpringMVC控制器接受具有可变键数/值数的JSON对象
我知道我需要接受的JSON对象总是单个键和值。我试图用@RequestBody映射和@RequestBody映射编写我的Spring MVC控制器,但是我总是收到400个错误的请求。当我将@RequestBody更改为字符串时,我看到了我的数据,并且没有返回错误的请求响应。是否可以编写一些东西来接受一个任意的JSON对象,该对象将始终符合单键对单值的约定Java SpringMVC控制器接受具有可变键数/值数的JSON对象,java,json,spring,spring-mvc,Java,Json,Spring,Spring Mvc,我知道我需要接受的JSON对象总是单个键和值。我试图用@RequestBody映射和@RequestBody映射编写我的Spring MVC控制器,但是我总是收到400个错误的请求。当我将@RequestBody更改为字符串时,我看到了我的数据,并且没有返回错误的请求响应。是否可以编写一些东西来接受一个任意的JSON对象,该对象将始终符合单键对单值的约定 @RequestMapping(value = "/advancedSearch", method = RequestMethod.POST,
@RequestMapping(value = "/advancedSearch", method = RequestMethod.POST,consumes ="application/json",produces = "application/json")
@ResponseBody
public MyResponse performAdvancedSearch(@RequestBody String advancedFormData) throws Exception{
这是正在使用字符串的映射
示例JSON-
{"name":"frank","Type":"Lumber"}
当从前端发布时,我调用JSON.stringify()来创建数据。同样,JSON总是像这样简单,没有嵌套的列表/对象,只有直接的键/值。服务器端永远不知道会有多少个键值对,也不知道所有可能的键,因此我无法创建一个简单的POJO。简化您的生活并创建一个类
public class AdvancedFormData
private String name;
private String type; // make it lower case in your JSON too
// appropriate getters and setters and a no-arg constructor for Jackson
}
和使用
public MyResponse performAdvancedSearch(@RequestBody AdvancedFormData advancedFormData) throws Exception{
请发布失败的处理程序方法和发送的请求正文。是否使用application/json内容类型?我的问题是,我不知道所有可能的键,如(name&type),因此我不能使用这样的类。@Barry Ok,请显示您使用
Map
尝试的解决方案。它与上面的处理程序完全相同,但不是RequestBody字符串advancedFormData,而是RequestBody Map advancedFormData或RequestBody Map advancedFormData,这两个处理程序都一直在给我400/错误的请求。@Barry with Spring MVC 4,@RequestBody映射图
适用于我输入的json{“name”:“frank”,“Type”:“Lumber”}
。如果您使用的是不同的Spring版本,请指定它并提供servlet上下文配置