Как передать атрибут сеанса как аргумент метода (параметр) с помощью 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 MVC с JSON
  • Привязка списка в @RequestParam
  • Бесконечная recursion с выпуском Jackson JSON и Hibernate JPA
  • Как вернуть данные JSON из весеннего controllerа с помощью @ResponseBody
  • Мое приложение не может открыть ресурс ServletContext
  • Отправка сообщения конкретному пользователю в Spring Websocket
  • java.lang.ClassNotFoundException: org.springframework.web.servlet.DispatcherServlet
  • как загрузить файл и данные json в почтальоне
  • 404 перенаправляет ошибку Spring с помощью java config
  • Spring 3 MVC, доступ к HttpRequest от controllerа
  • jackson 2.0 с весной 3.1
  • Interesting Posts

    Как отключить USB-устройства для разбухания компьютера по умолчанию в Windows 7

    Атрибут на интерфейсных элементах не работает

    Добавление нескольких JProgressBar в TableColumn JTable

    Как вы создаете Android View Pager с индикатором точек?

    Каков наилучший способ установки нового шрифта в эмулятор Android?

    Использование turbolinks в Rails link_to

    Как я могу предварительно загрузить страницу с помощью HTML5?

    Как преобразовать NSString в NSNumber

    Как использовать 3 монитора

    Определить информацию о процессе программно в Darwin / OSX

    Где именно стандарт C ++ говорит о разыменовании неинициализированного указателя – это неопределенное поведение?

    NodeJS: Как декодировать строку с кодировкой base64 обратно в двоичную?

    Ошибка сегментации в реализации btree

    Как установить размер для локального изображения с помощью knitr для уценки?

    Беспроводный интернет стал очень медленным на моем 27-дюймовом IMac

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