Как передать атрибут сеанса как аргумент метода (параметр) с помощью Spring MVC
Короче говоря, я хочу что-то вроде:
public String action(@SessionAttribute User user) {..}
вместо
public String action(HttpSession session) { User user = session.getAttribute("user"); }
Главным образом ради:
- Возrotation сгенерированного pdf с использованием пружины MVC
- Попытка создания URL-адресов REST-ful с несколькими точками в части «filename» - Spring 3.0 MVC
- Разница между запросом MVC и компонентом MVC
- Как найти все controllerы в Spring MVC?
- INFO: Нет типов Spring WebApplicationInitializer, обнаруженных на пути к classам
- читабельность
- модульное тестирование
- Запрос, отправленный клиентом, был синтаксически неправильным. Шаблон Spring MVC + JDBC
- Загрузка многостраничного файла с использованием шаблона Spring Rest + Spring Web MVC
- Spring MVC: Как выполнить проверку?
- Получить кодировку параметров
- Регистрация фаз (прототип) во время выполнения весной
- Возврат JsonObject с помощью @ResponseBody в SpringMVC
- как загрузить файл и данные json в почтальоне
- Разбор json в java-объекты в spring-mvc
Я нашел решение .
Идея заключается в регистрации пользовательского 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()); }