總之,我想是這樣的:如何與Spring MVC傳遞一個會話屬性的方法參數(參數)
public String action(@SessionAttribute User user) {..}
,而不是
public String action(HttpSession session) {
User user = session.getAttribute("user");
}
主要針對的緣故:
- 可讀性
- 單元測試
總之,我想是這樣的:如何與Spring MVC傳遞一個會話屬性的方法參數(參數)
public String action(@SessionAttribute User user) {..}
,而不是
public String action(HttpSession session) {
User user = session.getAttribute("user");
}
主要針對的緣故:
我發現了一個solution。
想法是爲AnnotationMethodHandlerAdapter
註冊自定義WebArgumentResolver
,該自定義註釋處理自定義註釋@SessionAttribute
(或@SessionParam
)。
發佈代碼的一個注意事項是,如果沒有指定value
,則可以使用param.getParameterName()
。
如果您擁有@SessionAttribute(必需= false)用戶用戶,該怎麼辦?作爲字符串返回的默認值與用戶不匹配。你能以某種方式管理嗎? – mickthompson 2011-01-14 16:01:49
您可以管理解析器中的任何內容。 :) – Bozho 2011-01-14 17:19:00
即使我們使用@ModelAttribute(「user」)用戶用戶作爲方法參數,然後在您的方法中使用用戶對象,它將從會話中更新用戶。屬性名稱必須與會話屬性名稱「user」匹配。
public String myMethod(@ModelAttribute("user") User user){
System.out.println(user.getDetails());
}
對於那些通過谷歌到達,至少4.3.2.RELEASE的,彈簧包括@SessionAttribute
註釋內置:
public String action(
@SessionAttribute(required=false, name="user") User user) {
// ...
}
自定義解決方案不再需要。
相關:http://stackoverflow.com/questions/2213974/spring-mvc-session-attribute-access – Bozho 2010-09-01 19:12:17
會話範圍的bean不是你需要的嗎? – skaffman 2010-09-01 19:18:00
沒有。我如何將它們作爲方法參數傳遞?我不能注入它們,因爲控制器是單身人士。 – Bozho 2010-09-01 19:21:31