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

36 浏览
0 Comments

有条件地设置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 对象

admin 更改状态以发布 2023年5月22日
0
0 Comments

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

0