弹簧 mvc 控制器接受具有可变键/值数的 JSON 对象

2022-09-04 22:10:25

我知道我需要接受的 JSON 对象将始终是单个键和值。我试图用@RequestBody Map和@RequestBody Map编写我的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{

这是现在正在使用String的映射...

示例 JSON-

    {"name":"frank","Type":"Lumber"}

从前端发布时,我调用JSON.stringify()来创建数据。同样,JSON将始终像这样简单,没有嵌套列表/对象,只有直键/值。服务器端永远不知道会有多少键值对进来,它不知道所有潜在的键,所以我无法创建一个简单的POJO。


答案 1

让你的生活变得简单,并创建一个类

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{

答案 2