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

Ale*_*vic 6 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) {
...
}
Run Code Online (Sandbox Code Playgroud)

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

Mas*_*ave 6

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

在另一方面,如果你在你的方法坚持,你可以创建自定义ArgumentResolver的解释在这里


Luk*_*ker 3

我很确定那行不通。可能有一个解决方法,但更简单的方法是引入一个包装对象并更改您的签名。

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