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

时间:2016-03-31 19:25:08

标签: spring spring-restcontroller

我可以使用以下内容提交删除请求:

@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中的put请求处理程序正常工作,但在此删除请求中没有。

这里是@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会导致删除请求返回400(错误请求)http响应?

我使用的是spring-web-4.1.4&amp;弹簧安全4.0.3

1 个答案:

答案 0 :(得分:0)

我挖了一点,发现指定一个@PathVariable的“id”以某种方式将它附加到@ModelAttribute变量(作为Long(!)而不是我指定的String)。然后我遇到了这篇文章,引导我找到解决问题的不同方法:

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) {
    ...
}

希望这会帮助其他人快速解决这个问题,而不是花一天时间试图解决这个问题......