在删除请求中添加 @ModelAttribute 导致 400(错误请求)

Adding @ModelAttribute results in 400 (Bad Request) in Delete Request

我可以通过以下方式提交删除请求:

@RequestMapping(value = "/{id}", method = RequestMethod.DELETE)
public ResponseEntity<Result> deleteTest(@PathVariable String id) {
    return new ResponseEntity<>(Result.Success("Hi " + id + "!!!", null), HttpStatus.OK);
}

但是,当我添加一个 @ModelAttribute 变量时,我得到 400(错误请求)作为 http 响应代码:

@RequestMapping(value = "/{id}", method = RequestMethod.DELETE)
public ResponseEntity<Result> deleteTest(@PathVariable String id, @ModelAttribute("authUser") User authUser) {
    return new ResponseEntity<>(Result.Success("Hi " + id + "!!!", null), HttpStatus.OK);
}

这个 @ModelAttribute 与我在 @RestController 中的放置请求处理程序一起工作正常,但在这个删除请求中没有。

这是 @ModelAttribute 代码:

@ModelAttribute("authUser")
public User authUser(@AuthenticationPrincipal SpringAuthUser springAuthUser) throws Exception {
    User user = ConstantsHome.userprofileMgr.getUserByUserId(springAuthUser.getUsername(), true, true);
    user.updateRights(null);
    request.getSession().setAttribute(ConstantsHome.USEROBJECT_KEY, user);
    return user;
}

为什么添加 @ModelAttribute 会导致对 return 400(错误请求)http 响应的删除请求?

我正在使用 spring-web-4.1.4 & spring-security-4.0.3

我深入挖掘了一下,发现指定 "id" 的 @PathVariable 以某种方式将其附加到 @ModelAttribute 变量(作为 Long(!) 而不是我指定的字符串).然后我遇到了这个 post,它引导我用不同的方法来解决这个问题:

Values of @PathVariable and @ModelAttribute overlapping

最后将此作为方法声明(将 "id" 替换为 "userId"):

@RequestMapping(value = "/{userId}", method = RequestMethod.DELETE)
public ResponseEntity<Result> deleteUser(@PathVariable String userId,
                                         @ModelAttribute("authUser") User authUser) {
    ...
}

希望这会帮助可能 运行 解决这个问题的其他人,而不是花一天时间试图解决这个问题...