2012-04-27 56 views
1

我需要根據http會話屬性將@RequestMapping映射到兩個不同的控制器方法。Spring MVC可以使用@RequestMapping註釋來匹配基於httpsession參數的url

我看到@RequestMapping基於值,方法,參數和標頭進行匹配。 有沒有基於會話屬性映射的方法?

如果我使用param,我需要強制客戶端發送請求參數 例如:aVersion = 1或aVersion = 2。

如果有任何示例覆蓋@RequestMapping?你能指點我嗎?

回答

1

是和否。您可以在您的控制器中添加HttpSession參數到您的方法。來自Spring MVC documentation

會話對象(Servlet API):類型爲HttpSession。這種類型的參數強制存在相應的會話。結果,這樣的論證永遠不會爲空。

但是,你必須做的會話屬性檢查手動據​​我所知:

@RequestMapping("/some_url") 
void someMethod(HttpSession session) { 

    Object firstAttr = session.getAttribute("firstAttribute"); 
    if (firstAttr != null) { 
     doSomethingWithFirstAttribute(firstAttr); 
    } 

    Object secondAttr = session.getAttribute("secondAttribute"); 
    if (secondAttr != null) { 
     doSomethingWithSecondAttribute(secondAttr); 
    } 
} 
+0

感謝您的答覆。我正在尋找的是基於會話屬性反序列化@RequestBody。我不能在建議的解決方案中這樣做。我試圖擴展RequestMapping,但後來無法插入該配置。任何幫助,將不勝感激。 – 2012-04-30 17:46:36

+0

[@RequestBody](http://static.springsource.org/spring/docs/3.1.x/spring-framework-reference/html/mvc.html#mvc-ann-requestbody)註釋映射請求的主體到一個方法參數,所以我不認爲這將適用於你的例子。但是,您可以創建一個包含正文和會話參數的方法: '@RequestMapping(「/ some_url」) void someMethod(@RequestBody String body,HttpSession session){ // do stuff } – matsev 2012-05-01 07:56:29

相關問題