Q: controller中怎么接受JSON的参数呢?
A: 使用@RequestBody接收参数即可。
例如:@RequestBody List<OrderDto> orderDtos
Q: 运行时程序出现了Required request body is missing,或者设置@RequestBody(require= false)时,参数总是null,怎么办呢?
例子如下,
/** * 下面的controller 会出现Required request body is missing 错误 **/ @RequestMapping(value = "/test", method = RequestMethod.POST) @ResponseBody public JsonResult test(@RequestBody List<OrderDto> orderDtos, HttpSession session) { JsonResult jsonResult = new JsonResult(); logger.info(orderDtos.toString()); return jsonResult; }
/** *下面的controller会出现orderDtos总是为null的错误。 **/ @RequestMapping(value = "/test", method = RequestMethod.POST) @ResponseBody public JsonResult test(@RequestBody(required = false) List<OrderDto> orderDtos, HttpSession session) { JsonResult jsonResult = new JsonResult(); logger.info(orderDtos.toString()); return jsonResult; }
那么上边的问题是为什么呢,我们来分析一下传值(使用postman测试)
上图可以看到,我们的参数是 orderDtos,值为:[{"id":1,"order":1},{"id":2,"order":2}]。参数和值正确,为什么controller会出错呢。
因为controller使用@RequestBody接受参数时,不能使用get方法进行传值,必须使用POST方法,且要明确数据类型为JSON,解决办法如下图:
注意红色圈中的和设置。
结论:Controller中使用@RequestBody 是没问题的,需要注意的是传值的形式,另外需要注意 参数必须是JOSN格式,如果不是JOSN格式也会出现同样的问题。
{{ cmt.username }}
{{ cmt.content }}
{{ cmt.commentDate | formatDate('YYYY.MM.DD hh:mm') }}