SpringMVC的Controller接收JSON数据,可以用MappingJackson2HttpMessageConverter将JSON数据自动封装为对象,方便后续处理。当然,需要写一个与JSON对应的类。
示例:
// Controller
@Controller
@RequestMapping({"/api"})
class MyController {
@RequestMapping(value = {"/test"}, method = {RequestMethod.POST})
@ResponseBody
public MyResponseBody test(@RequestBody MyRequestBody body) {
System.out.println(body);
retrun new MyResponseBody(0, "success");
}
}
// MyRequestBody对象封装
class MyRequestBody {
private int a;
private String b;
// 构造器略...
// getters、settters 略...
}
// MyResponseBody对象封装
class MyResponseBody {
private int code;
private String message;
// 构造器略...
// getters、setters 略...
}
调用时传入JSON数据:
{
"a": 1,
"b": "hello tom!"
}
传入JSON的数据要与MyRequestBody的属性完全一致!
但是,实际使用中,要传入的JSON可能是用其他方式生成的(例如根据表单生成的,或者是旧的接口定义的JSON格式),并不能保证与后端的MyRequestBody完全一致,例如,JSON数据多了个时间戳:
{
"a": 1,
"b": "hello tom!",
"timestamp": "1234567890"
}
这时,调用Controller会报错,大致意思是说MyRequestBody里没有timestamp属性!
这时,希望的结果是JSON转成MyRequestBody时能自动忽略这些未知的属性。
只需一步,为MyRequestBody类加上标注:
@JsonIgnoreProperties(ignoreUnknown = true)
即可!