Spring: как мне добавить HttpServletRequest в область bean с запросом?

Я пытаюсь настроить область запроса bean в Spring.

Я успешно настроил его, поэтому bean создается один раз за запрос. Теперь ему нужно получить доступ к объекту HttpServletRequest.

Так как bean создается один раз за запрос, я считаю, что контейнер может легко ввести объект запроса в мой bean. Как я могу это сделать?

Ответ 1

Объектно-ориентированный beans может быть автообновлен с объектом запроса.

private @Autowired HttpServletRequest request;

Ответ 2

Spring предоставляет текущий объект HttpServletRequest (а также текущий объект HttpSession) через объект-оболочку типа ServletRequestAttributes. Этот объект-оболочка привязан к ThreadLocal и получен путем вызова метода static RequestContextHolder.currentRequestAttributes().

ServletRequestAttributes предоставляет метод getRequest() для получения текущего запроса getSession(), чтобы получить текущий сеанс и другие методы для получения атрибутов, хранящихся в обоих областях. Следующий код, хотя и немного уродливый, должен предоставить вам текущий объект запроса в любом месте приложения:

HttpServletRequest curRequest = 
((ServletRequestAttributes) RequestContextHolder.currentRequestAttributes())
.getRequest();

Обратите внимание, что метод RequestContextHolder.currentRequestAttributes() возвращает интерфейс и должен быть введен в тип ServletRequestAttributes, который реализует интерфейс.


Spring Javadoc: RequestContextHolder | ServletRequestAttributes

Ответ 3

Как предлагается здесь, вы также можете ввести HttpServletRequest в качестве параметра метода, например:

public MyResponseObject myApiMethod(HttpServletRequest request, ...) {
    ...
}