HttpSession как параметр в контроллере

Я пытаюсь понять, как отправка HttpSession в качестве параметра в контроллере пружины работает. У меня есть jsp, который отправляет запрос на нажатие кнопки отправки. В контроллере читаем сессии следующим образом

В контроллере:

public ModelAndView viewEditFundClass(HttpServletRequest request,HttpServletResponse response,Model model){
HttpSession session = (HttpSession)request.getSession();

java.util.Date startDate = sesseion.getAttribute("startDate");

Однако, когда я просто изменяю контроллер на следующее, я все еще могу получить доступ к сеансу

 public ModelAndView viewEditFundClass(HttpServletRequest request,HttpServletResponse response, HttpSession session,Model model)

Я хотел бы знать, как это делается в Spring, то есть, как пост-запрос передавал HttpSession в качестве параметра? эта сессия будет действительной?

1 ответ

Решение

Предполагая, что вы используете Spring 3+ @Controller а также @RequestMapping Методы-обработчики, Spring определяет набор поддерживаемых типов аргументов по умолчанию для ваших обработчиков.

  • Объект сеанса (Servlet API): типа HttpSession, Аргумент этого типа обеспечивает наличие соответствующего сеанса. Как следствие, такой аргумент никогда не бывает null,

Spring использует шаблон стратегии для достижения этой цели, используя интерфейс HandlerMethodArgumentResolver, Он проверяет типы параметров ваших методов-обработчиков и для каждого типа пытается найти HandlerMethodArgumentResolver это будет в состоянии решить аргумент для этого.

За HttpSession, эта реализация ServletRequestMethodArgumentResolver,

Другие вопросы по тегам