Spring MVC返回自定义HTTP状态码(无错误)
在Spring MVC @RequestMapping注解中,我返回JSP页面名称作为结果。这将返回HTTP状态码200 OK。我如何将此状态代码更改为201创建的内容?Spring MVC返回自定义HTTP状态码(无错误)
@ResponseStatus不起作用。而且,HttpServletResponse将不起作用,因为我只需要返回我的自定义JSP页面。
@RequestMapping(method = RequestMethod.POST)
public String addPhone(@ModelAttribute("phone") Phone phoneVO) {
phoneManager.addPhone(phoneVO);
return "redirect:/phone";
}
好的,我发现了解决方案:
response.setStatus(HttpServletResponse.SC_CREATED); return "phonePage";
正如@SotiriosDelimanolis提到的,重定向被重写在setStatus值。因此,我不直接调用JSP页面(同时重新发送参数)。
我想重定向,状态必须是HTTP确定。
@RequestMapping(method = RequestMethod.POST)
public String addPhone(@ModelAttribute("phone") Phone phoneVO) {
phoneManager.addPhone(phoneVO);
return "/phone";
}
哎呀,我结束之前发送。打算写,你可以添加HttpServletResponse作为参数,然后用它来设置代码。
'sendRedirect'将覆盖'setStatus'中的值。有更好的方法可以实现重定向,而无需在控制器类型中涉及Servlet API。 –
现在我不知道你在暗示什么。 –
正如问题所述,我不能使用HttpServletResponse,因为我只需要使用custome JSP页面进行响应。看起来重定向覆盖了响应状态。需要找到另一种重定向方式。 –
你应该尝试做下面的事情,你应该返回你的视图名称而不用任何重定向,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";
}
手机实际上是url(/ phone)而不是视图名称。我只需要重定向,因为直接调用视图不允许我传递参数。 –
@ShubhamVadhera你在问题中指的是什么参数? – ScanQR
通过'model.addAttribute'从程序到jsp页面的任何属性。例如:'model.addAttribute(“nextid”,phoneManager.getNextID());' –
对于那些你想设置状态返回一个模型对象我一样:
@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;
}
希望这可以帮助别人......万一出现问题可以很明显的设置故障状态。
你发布的内容应该会返回给你301或302.你正在做一个重定向。 –
它返回HTTP 200 OK –