2016-11-16 464 views
0

在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"; 
} 
+1

你發佈的內容應該會返回給你301或302.你正在做一個重定向。 –

+0

它返回HTTP 200 OK –

回答

0

好的,我發現瞭解決方案:

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

正如@SotiriosDelimanolis提到的,重定向被重寫在setStatus值。因此,我不直接調用JSP頁面(同時重新發送參數)。

我想重定向,狀態必須是HTTP確定。

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

哎呀,我結束之前發送。打算寫,你可以添加HttpServletResponse作爲參數,然後用它來設置代碼。

+0

'sendRedirect'將覆蓋'setStatus'中的值。有更好的方法可以實現重定向,而無需在控制器類型中涉及Servlet API。 –

+0

現在我不知道你在暗示什麼。 –

+0

正如問題所述,我不能使用HttpServletResponse,因爲我只需要使用custome JSP頁面進行響應。看起來重定向覆蓋了響應狀態。需要找到另一種重定向方式。 –

1

你應該嘗試做下面的事情,你應該返回你的視圖名稱而不用任何重定向,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"; 
} 
+0

手機實際上是url(/ phone)而不是視圖名稱。我只需要重定向,因爲直接調用視圖不允許我傳遞參數。 –

+0

@ShubhamVadhera你在問題中指的是什麼參數? – ScanQR

+0

通過'model.addAttribute'從程序到jsp頁面的任何屬性。例如:'model.addAttribute(「nextid」,phoneManager.getNextID());' –

0

對於那些你想設置狀態返回一個模型對象我一樣:

@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; 
} 

希望這可以幫助別人......萬一出現問題可以很明顯的設置故障狀態。

相關問題