2013-10-31 98 views
6

我現有的代碼如下:Spring MVC控制器可以返回HttpServletResponse和視圖嗎?

String myController(@PathVariable someId, ModelMap map){ 
.... 
return "myViewName"; 
} 

現在我想設置一個cookie在某些情況下,所以我需要得到一個HttpServletResponse的obj的保持。我可以將這樣一個響應obj添加到參數列表中並在控制器上對其進行操作嗎? 如果是這樣,我想知道我自己的響應是如何與解決「myViewName」的JSP生成的響應協調一致的。

回答

9

是的。

@RequestMapping 
public String myController(@PathVariable someId, ModelMap map, HttpServletResponse response) { 
    // Do what you need to do on the response, like set a cookie 
    return "myViewName"; 
} 
0

關於您的其他問題:「我自己的響應與JSP解析」myViewName「所產生的響應是否一致。

當你返回一個視圖說「myViewName」,它將被解析爲一個特定的資源(JSP視圖或JSON視圖或任何其他視圖)。一旦取得視圖資源取決於您返回的內容,該視圖會對響應進行渲染。該響應對象與傳遞給控制器​​函數(myController)的響應對象相同。所以說,如果你在控制器函數的響應中設置了一些cookie /頭文件,那麼視圖用於執行渲染的響應也會具有相同的屬性。

如果您想自己處理實際的渲染/響應,您可以始終獲取響應的輸出流並寫入並關閉流。然後,您返回的視圖就會被忽略,因爲調度員會檢查響應是否已經被處理,並且只會執行後處理。

希望清理任何尋找調度邏輯的人。

相關問題