如何使用Spring MVC将会话属性作为方法参数(参数)传递

时间:2010-09-01 19:03:03

标签: java spring spring-mvc

简而言之,我想要的是:

public String action(@SessionAttribute User user) {..}

而不是

public String action(HttpSession session) {
     User user = session.getAttribute("user");
}

主要是为了:

  • 可读性
  • 单元测试

3 个答案:

答案 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());

}