【问题标题】:Conditionally setting the HTTP status without directly manipulating the HttpServletResponse有条件地设置 HTTP 状态而不直接操作 HttpServletResponse
【发布时间】:2013-06-21 14:42:54
【问题描述】:

如何在 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,因为有两种可能的状态。我希望有比manually manipulating the HttpServletResponse 更简洁的方法。而且我想指明要使用的视图名称,所以我不能have the request handler return a ResponseEntity object with the status set appropriately

【问题讨论】:

    标签: http spring-mvc http-status-codes


    【解决方案1】:

    如果您需要 201 响应代码,您可以在创建资源时返回 ResponseEntityHttpStatus.CREATED,否则返回视图名称。如果是这样,您不能使用重定向(http 代码 301)。见RedirectView

    【讨论】:

    • “如果是这样,你不能使用重定向”我知道。这就是我的问题的重点
    猜你喜欢
    • 1970-01-01
    • 2019-03-21
    • 1970-01-01
    • 2016-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-01
    • 2012-06-16
    相关资源
    最近更新 更多