如何在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。
答案 0 :(得分:3)
如果您需要201响应代码,则可以在创建资源时返回ResponseEntity HttpStatus.CREATED,否则返回视图名称。如果是这样,则无法使用重定向(http代码301)。请参阅RedirectView。