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

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

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

вместо

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

Главным образом ради:

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

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

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

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

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

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

Специальное решение больше не требуется.

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

 public String myMethod( @ModelAttribute("user") User user ){ System.out.println(user.getDetails()); } 
  • Spring web, security + web.xml + mvc dispatcher + Bean создается дважды
  • java.lang.ClassNotFoundException: org.springframework.web.servlet.DispatcherServlet
  • Почему мы не должны создавать controller Spring MVC @Transactional?
  • Настройка приоритета нескольких @ControllerAdvice @ExceptionHandlers
  • Загрузка контекста весной с помощью web.xml
  • Доступ к областям профилированных объектов в streamах
  • spring Exception при запуске приложения в WebSphere с java 8
  • Spring MVC - HttpMediaTypeNotAcceptableException
  • Spring настроить формат @ResponseBody JSON
  • Перенаправление весной MVC
  • Разбор json в java-объекты в spring-mvc
  • Interesting Posts

    Отправка multipart / formdata с помощью jQuery.ajax

    Где SVN на OS X Mountain Lion?

    Может ли FFmpeg конвертировать mp3-файлы в m4a в полном объеме, т. Е. С копированием как аудио-, так и видеопотоков (jpeg cover)?

    Какие существуют способы отображения уведомлений на рабочем столе из веб-приложения?

    Как включить ведение журнала procmon для каждой загрузки?

    Как spec / rails_helper.rb отличается от spec / spec_helper.rb? Нужно ли мне это?

    Android LinearLayout с цветовым ресурсом: что я делаю неправильно?

    Не удалось найти следующие classы: android.support.v7.internal.app.WindowDecorActionBar

    Почему люди пишут скрипт #! / Usr / bin / env python в первой строке скрипта Python?

    Какие специальные переменные доступны при написании команды оболочки для контекстного меню

    Преобразование строки Java в sql.Timestamp

    Как восстановить значок жесткого диска? Windows 7

    Угловая: как использовать одно решение для всех маршрутов моего приложения

    Удалить это разрешено?

    Фокусируемая строка внутри таблицы android

    Давайте будем гением компьютера.