controller请求出现 Required request body is missing 或者 获取的参数为null

xu.wang

发布于 2018.10.18 20:42 阅读 5751 评论 0

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格式也会出现同样的问题。