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

2022-09-03 06:09:44

简而言之,我想要这样的东西:

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

而不是

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

主要是为了:

  • 可读性
  • 单元测试

答案 1

我找到了一个解决方案

这个想法是为 注册一个自定义 WebArgumentResolver,它处理自定义注释 - (or )。AnnotationMethodHandlerAdapter@SessionAttribute@SessionParam

对那里发布的代码的一个注释是,如果指定了no,则可以使用。param.getParameterName()value


答案 2

对于那些通过Google到达的人,至少从4.3.2.RELEASE开始,Spring包含一个内置@SessionAttribute注释:

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

    // ...

}

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


推荐