在删除请求中添加 @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) {
...
}
希望这会帮助可能 运行 解决这个问题的其他人,而不是花一天时间试图解决这个问题...
我可以通过以下方式提交删除请求:
@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) {
...
}
希望这会帮助可能 运行 解决这个问题的其他人,而不是花一天时间试图解决这个问题...