我可以使用以下内容提交删除请求:
@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
答案 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) {
...
}
希望这会帮助其他人快速解决这个问题,而不是花一天时间试图解决这个问题......