![](/img/trans.png)
[英]Return different HTTP status code from spring boot custom validators
[英]Spring MVC return custom HTTP status code (no error)
在Spring MVC @RequestMapping批注中,我将返回JSP页面名称作为结果。 这将返回HTTP状态代码200 OK。 如何将状态代码更改为创建的201?
@ResponseStatus不起作用。 另外,由于我只需要返回自定义JSP页面,所以HttpServletResponse将无法工作。
@RequestMapping(method = RequestMethod.POST)
public String addPhone(@ModelAttribute("phone") Phone phoneVO) {
phoneManager.addPhone(phoneVO);
return "redirect:/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;
}
希望这对某人有帮助...如果出现问题,您显然可以将状态设置为失败。
您应该尝试执行以下操作,应该返回视图名称,而不要进行任何重定向,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";
}
好的,我找到了解决方案:
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作为参数,然后使用它来设置代码。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.