一个控制器方法中的多个@RequestBody值

时间:2014-11-28 13:27:31

标签: spring-mvc

当我向我的端点发送PATCH请求时,我收到错误400,看起来像这样

@RequestMapping(value = "...",
    method = RequestMethod.PATCH,
    consumes = "application/json",
    produces = "application/json")
@ResponseBody
public User updateUserPartial(@PathVariable("userId") String userId,
                                  @RequestBody Map<String, Object> userMap,
                                  @RequestBody User user,
                                  HttpServletResponse response) {
...
}

所以基本上userMap和user都应该包含不同结构的相同数据。 如果我省略一个@RequestBody值,这似乎正常工作。 是否有可能同时拥有@RequestBody值?

2 个答案:

答案 0 :(得分:5)

你不能使用两个@RequestBody,因为它只能绑定到一个对象(主体只能被消耗一次)。正如Luke所解释的那样,最简单的方法是创建一个捕获所有相关数据的对象,然后创建参数中的对象。

另一方面,如果您坚持使用自己的方法,可以按照here

的说明创建自定义ArgumentResolver

答案 1 :(得分:3)

我很确定这不会奏效。可能有一种解决方法,但更简单的方法是引入包装器对象并更改签名。

您可以在此处找到有关它的更多信息:Spring MVC controller with multiple @RequestBody