在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";
}
答案 0 :(得分:6)
对于那些想要设置返回像我这样的模型对象的状态的人:
@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;
}
希望这有助于某人......显然,如果出现问题,您可以设置失败状态。
答案 1 :(得分:3)
您应该尝试执行以下操作,您应该返回您的视图名称而不需要任何重定向,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";
}
答案 2 :(得分:0)
好的,我找到了解决方案:
response.setStatus(HttpServletResponse.SC_CREATED);
return "phonePage";
如@SotiriosDelimanolis所述,重定向正在覆盖setStatus中的值。因此,我不是重定向,而是直接调用JSP页面(同时也重新发送参数)。
我想通过重定向,状态必须是HTTP OK。
答案 3 :(得分:-2)
@RequestMapping(method = RequestMethod.POST)
public String addPhone(@ModelAttribute("phone") Phone phoneVO) {
phoneManager.addPhone(phoneVO);
return "/phone";
}
糟糕,在我结束之前发送。打算写,你可以添加HttpServletResponse作为参数,然后用它来设置代码。