有条件地设置HTTP状态而不直接操作HttpServletResponse

Rae*_*ald 9 http spring-mvc http-status-codes

如何在Spring MVC请求处理程序中方便地有条件地设置HTTP状态代码?

我有一个响应POST请求的请求处理程序,用于创建新资源.如果请求有效,我希望它重定向到新资源的URI,返回201(已创建)HTTP状态代码.如果请求无效,我希望它能够让用户有机会更正提交表单中的错误,并且不应该提供201的状态代码.

 @RequestMapping(value = { "/myURI/" }, method = RequestMethod.POST)
 public String processNewThingForm(
    @ModelAttribute(value = "name") final String name,
    final BindingResult bindingResult) {

  myValidator.validate(name, bindingResult);

  if (!bindingResult.hasErrors()) {
     getService().createThing(name);
     return "redirect:" + name;
  } else {
     return "newThingView";
  }
Run Code Online (Sandbox Code Playgroud)

}

但这并没有为重定向案例提供正确的响应状态.

我不能简单地添加一个@ResponseStatus,因为有两种可能的状态.我希望有一种比手动操作HttpServletResponse更简洁的方法.我想指出要使用的视图名称,所以我不能让请求处理程序返回一个ResponseEntity状态设置正确的对象.

Rob*_*ert 3

如果您想要 201 响应代码,则可以在创建资源时返回带有HttpStatus.CREATED的ResponseEntity ,否则返回视图名称。如果是这样,则无法使用重定向(http 代码 301)。请参阅重定向视图