提问者:小点点

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


我如何方便地在一个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";
  }

}

但这不会给出重定向情况的正确响应状态。

我不能简单地添加一个@responsestatus,因为有两种可能的状态。我希望有一种比手动操作HttpServletResponse更简洁的方法。并且我想指出要使用的视图名称,这样我就不能让请求处理程序返回状态设置适当的responseEntity对象。


共1个答案

匿名用户

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