代码之家  ›  专栏  ›  技术社区  ›  Bozho

如何用springmvc将session属性作为方法参数(parameter)传递

  •  15
  • Bozho  · 技术社区  · 15 年前

    简而言之,我想要的是:

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

    而不是

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

    主要是为了:

    • 单元测试
    3 回复  |  直到 15 年前
        1
  •  19
  •   Bozho    15 年前

    我找到一个 solution

    我们的想法是注册一个客户 WebArgumentResolver 对于 AnnotationMethodHandlerAdapter ,它处理自定义批注- @SessionAttribute @SessionParam ).

    param.getParameterName() 如果没有,可以使用 value

        2
  •  3
  •   drew    9 年前

    对于那些通过Google到达的用户,至少在4.3.2.0版本中,Spring包含一个 @SessionAttribute

    public String action(
        @SessionAttribute(required=false, name="user") User user) {
    
        // ...
    
    }
    

    不再需要自定义解决方案。

        3
  •  0
  •   Shrirang Edgaonkar    13 年前

    即使我们使用@modeldattribute(“user”)user作为方法参数,然后在方法中使用user对象,它也会从会话中更新user。属性名必须与会话属性名“user”匹配。

    public String myMethod( @ModelAttribute("user") User user ){
    
     System.out.println(user.getDetails());
    
    }