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

Conditionally setting the HTTP status without directly manipulating the HttpServletResponse

提问人:Raedwald 提问时间:6/21/2013 最后编辑:CommunityRaedwald 更新时间:11/25/2014 访问量:14173

问:

如何在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";
  }

}

但这并不能为重定向情况提供正确的响应状态。

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

HTTP spring-mvc http-status -代码

评论


答:

3赞 Robert 1/3/2014 #1

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

评论

0赞 Raedwald 7/23/2014
“如果是这样,你就不能使用重定向”我知道。这就是我问题的重点