Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java SpringMVC控制器接受具有可变键数/值数的JSON对象_Java_Json_Spring_Spring Mvc - Fatal编程技术网

Java SpringMVC控制器接受具有可变键数/值数的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,

我知道我需要接受的JSON对象总是单个键和值。我试图用@RequestBody映射和@RequestBody映射编写我的Spring MVC控制器,但是我总是收到400个错误的请求。当我将@RequestBody更改为字符串时,我看到了我的数据,并且没有返回错误的请求响应。是否可以编写一些东西来接受一个任意的JSON对象,该对象将始终符合单键对单值的约定

@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上下文配置