Для краткости запрос HttpServletRequest — это API сервлетов, который предоставляет объект для получения информации HTTP-запроса, инициированного клиентом.
Например:
- Получить параметры запроса
- Получить заголовок запроса
- Получить информацию о сеансе
- Получите IP-адрес запроса и другую информацию
Итак, вопрос в том, каковы методы получения объекта Request в Spring Boot?
Существует три распространенных способа получения объектов Request:
- Получение объекта Request через параметры запроса;
- Получение объекта Request через RequestContextHolder;
- Получение объекта Request посредством автоматического внедрения.
Давайте исследуем это немного дальше.
1 . Получение по параметру запроса
@RequestMapping("/") @ResponseBody public void index(HttpServletRequest request){ // do something }
Логика этого метода заключается в том, что когда контроллер начинает обрабатывать запрос, Spring назначит объект Request параметру метода, и мы можем получить объект Request, установив его непосредственно в параметре.
2. Получение через RequestContextHolder
@RequestMapping("/") @ResponseBody public void index(){ ServletRequestAttributes servletRequestAttributes = (ServletRequestAttributes)RequestContextHolder.getRequestAttributes(); HttpServletRequest request = servletRequestAttributes.getRequest(); // do something }
В Spring Boot RequestContextHolder
— это класс инструментов, предоставляемый Spring Framework для хранения и доступа к информации о контексте запроса, связанной с текущим потоком в многопоточной среде.
В основном он используется для хранения информации о текущем запросе в рамках потока, чтобы эту информацию можно было использовать и использовать в различных компонентах, особенно если никакие параметры не передаются напрямую.
Основные роли RequestContextHolder — следующий:
- В веб-приложениях каждый запрос…