使用spring mvc在post请求中将json内容解析为多参数

时间:2016-02-18 12:27:52

标签: java json spring spring-mvc

如何在post请求中自动解析json到multi参数,内容类型为" application / json"? 例如,我有这样一种控制器方法:

@RequestMapping(value = "/test", method = RequestMethod.POST)
public Object testPost(@RequestBody Student student) {
    return student;
}
"学生"上课是:

public class Student {
    private Integer id;
    private String name;
    getter&setter
}

和json是:

{"student":{"id":1,"name":"测试"}}

控制器返回空对象(当然不是null," id"" name"属性为null)。 我知道当json是:

时它会起作用
{"id":1,"name":"测试"}

或者我把学生变成了一个学生"在其他类中的字段,但我不能这样做。 我发现它不能使用@RequestParams或@ModelAttribute,因为在RequestParamMethodArgumentResolver和ModelAttributeMethodProcessor中,它们只能在ServletRequest#getParameter中找到值。 那么,春天mvc可以解决这个问题,还是我只能做出自定义? (原谅我,我的英语非常糟糕......)

感谢帮助,我无法将学生包起来,因为我正在使用公司内部工具,也许这不是一个非常常见的功能所以我决定编写一个自定义参数解析器(HandlerMethodArgumentResolver)。

2 个答案:

答案 0 :(得分:0)

尝试将“Student”对象包装在其他对象中。对于您正在执行的当前实现,json应该看起来像

{ “ID”:1, “名称”: “测试”}

但是,如果您将JSON作为

发送到控制器

{ “学生”:{ “ID”:1, “名称”: “测试”}}

然后它必须包装在另一个Java类中,以便JSON解析器正确解析它。

答案 1 :(得分:0)

你可以在方法处理请求之前处理json消息,在处理体中你可以将json字符串转换为student对象然后返回它,该student对象将保存在requestAttribute中,名称为student它在你的testPost中

@RequestMapping(path="/test", method = RequestMethod.POST)
public String testPost(@ModelAttribute("student") Student student) {
    System.out.println("student->" + student);

    return "response";

}

@ModelAttribute("student")
public Student treatBody(@RequestBody String body) {
    //retrieve student from json 
    return student;
}