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
,