Как передать атрибут сеанса в качестве аргумента метода (параметра) в Spring MVC - PullRequest
15 голосов
/ 01 сентября 2010

Короче, я хочу что-то вроде:

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

вместо

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

В основном ради:

  • читаемость
  • модульное тестирование

Ответы [ 3 ]

19 голосов
/ 01 сентября 2010

Я нашел решение .

Идея состоит в том, чтобы зарегистрировать пользовательский WebArgumentResolver для AnnotationMethodHandlerAdapter, который обрабатывает пользовательскую аннотацию - @SessionAttribute (или @SessionParam).

В примечании к опубликованному коду указано, что param.getParameterName() можно использовать, если не указан value.

3 голосов
/ 02 августа 2016

Для тех, кто прибывает через Google, по крайней мере с 4.3.2.RELEASE, Spring включает в себя встроенную аннотацию @SessionAttribute:

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

    // ...

}

Индивидуальное решение больше не требуется.

0 голосов
/ 26 мая 2012

Даже если мы используем @ModelAttribute ("user") User user в качестве параметра метода, а затем используем объект user в вашем методе, он обновит пользователя из сессии Имя атрибута должно совпадать с именем атрибута сеанса «пользователь».

public String myMethod( @ModelAttribute("user") User user ){

 System.out.println(user.getDetails());

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...