Подтвердить что ты не робот

Как передать атрибут сеанса как аргумент метода (параметр) с помощью Spring MVC

Короче говоря, мне нужно что-то вроде:

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

вместо

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

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

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

Ответ 1

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

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

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

Ответ 2

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

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

    // ...

}

Пользовательское решение больше не требуется.

Ответ 3

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

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

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

}