简而言之,我想要的是:
public String action(@SessionAttribute User user) {..}
而不是
public String action(HttpSession session) {
User user = session.getAttribute("user");
}
主要是为了:
答案 0 :(得分:19)
我找到了solution。
我们的想法是为处理自定义注释的AnnotationMethodHandlerAdapter
注册自定义WebArgumentResolver
- @SessionAttribute
(或@SessionParam
)。
如果没有指定param.getParameterName()
,那么发布的代码的一个注释是value
可以使用。
答案 1 :(得分:3)
对于那些通过Google抵达的人,至少4.3.2.RELEASE,Spring包含一个@SessionAttribute
内置注释:
public String action(
@SessionAttribute(required=false, name="user") User user) {
// ...
}
不再需要自定义解决方案。
答案 2 :(得分:0)
即使我们使用@ModelAttribute(“user”)用户用户作为方法参数,然后在您的方法中使用用户对象,它也会从会话中更新用户。属性名称必须与会话属性名称“user”匹配。
public String myMethod( @ModelAttribute("user") User user ){
System.out.println(user.getDetails());
}