Spring MVC返回自定义HTTP状态代码(无错误)

在Spring MVC @RequestMapping注释中,我返回JSP页面名称作为结果。 这将返回HTTP状态代码200 OK。 如何将此状态代码更改为201创建的内容?

@ResponseStatus不起作用。 此外,HttpServletResponse将无法工作,因为我只需要返回我的自定义JSP页面。

@RequestMapping(method = RequestMethod.POST) public String addPhone(@ModelAttribute("phone") Phone phoneVO) { phoneManager.addPhone(phoneVO); return "redirect:/phone"; } 

您应该尝试执行以下操作,您应该返回您的视图名称而不需要任何重定向,Spring视图解析器应该需要解决您的自定义jsp。 (您应该正确配置视图解析器)

  @RequestMapping(method = RequestMethod.POST) public String addPhone(@ModelAttribute("phone") Phone phoneVO, HttpServletResponse response) { phoneManager.addPhone(phoneVO); response.setStatus(HttpServletResponse.SC_CREATED); return "phone"; } 

其他选项可能是在处理程序方法本身上使用@ResponseStatus注释,因为它确定addPhone的职责是在服务器上创建新资源。 因此,您可以在处理程序方法上定义状态。

  @RequestMapping(method = RequestMethod.POST) @ResponseStatus(HttpStatus.CREATED) public String addPhone(@ModelAttribute("phone") Phone phoneVO, HttpServletResponse response) { phoneManager.addPhone(phoneVO); return "phone"; } 

对于那些想要设置返回像我这样的模型对象的状态的人:

 @RequestMapping(value = "/yourRoute", method = RequestMethod.POST) public ModelAndView accountsPagePOST(@RequestBody final String body) { ModelAndView model = new ModelAndView("yourView"); //TODO do your logic and add your objects model.setStatus(HttpStatus.OK); return model; } 

希望这可以帮助某人……如果出现问题,您可以明显设置失败状态。

好的,我找到了解决方案:

response.setStatus(HttpServletResponse.SC_CREATED); return "phonePage";

正如@SotiriosDelimanolis所提到的,重定向正在覆盖setStatus中的值。 因此,我不是重定向,而是直接调用JSP页面(同时还重新发送参数)。

我想通过重定向,状态必须是HTTP OK。

 @RequestMapping(method = RequestMethod.POST) public String addPhone(@ModelAttribute("phone") Phone phoneVO) { phoneManager.addPhone(phoneVO); return "/phone"; } 

哎呀,在我完成之前发送。 打算写一下你可以添加HttpServletResponse作为参数,然后用它来设置代码。