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

Java Spring MVC返回自定义HTTP状态代码(无错误),java,spring,jsp,spring-mvc,Java,Spring,Jsp,Spring Mvc,在SpringMVC@RequestMapping注释中,我将返回JSP页面名称作为结果。这将返回HTTP状态代码200OK。如何将此状态代码更改为类似于201的代码 @ResponseStatus不起作用。此外,HttpServletResponse将无法工作,因为我只需要返回自定义JSP页面 @RequestMapping(method = RequestMethod.POST) public String addPhone(@ModelAttribute("phone") Phone ph

在SpringMVC@RequestMapping注释中,我将返回JSP页面名称作为结果。这将返回HTTP状态代码200OK。如何将此状态代码更改为类似于201的代码

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

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

哎呀,在我完成之前就发送了。您可以添加HttpServletResponse作为参数,然后使用它来设置代码。

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

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

 @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_);
返回“电话页”

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


我想使用重定向时,状态必须是HTTP OK。

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

@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,
sendRedirect
将覆盖
setStatus
中的值。有更好的方法可以实现重定向,而不必在控制器类型中包含Servlet API。现在我不知道您的建议。如前所述,我不能使用HttpServletResponse,因为我只需要使用custome JSP页面进行响应。看起来重定向正在覆盖响应状态。需要找到另一种重定向方式。phone实际上是url(/phone),而不是视图名称。我只需要重定向,因为直接调用视图不允许我传递参数。@ShubhamVadhera您在问题中引用的参数是什么?通过
model.addAttribute
从程序到jsp页面的任何属性。例如:
model.addAttribute(“nextid”,phoneManager.getNextID())
 @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;
}