[java] Spring : 요청 범위 빈에 HttpServletRequest를 어떻게 주입합니까?

Spring에서 요청 범위 빈 을 설정하려고합니다 .

요청 당 한 번 빈이 생성되도록 성공적으로 설정했습니다. 이제 HttpServletRequest 객체에 액세스해야합니다.

빈은 요청 당 한 번 생성되기 때문에 컨테이너가 내 빈에 요청 객체를 쉽게 주입 할 수 있다고 생각합니다. 어떻게 할 수 있습니까?



답변

요청 범위 빈은 요청 객체와 자동 연결될 수 있습니다.

private @Autowired HttpServletRequest request;


답변

Spring 은 유형 의 래퍼 객체를 통해 현재 HttpServletRequest객체 ( 현재 객체뿐만 아니라)를 노출합니다 . 이 래퍼 객체는 ThreadLocal에 바인딩되며 메서드 를 호출하여 얻습니다 .HttpSessionServletRequestAttributesstaticRequestContextHolder.currentRequestAttributes()

ServletRequestAttributes방법을 제공하고 getRequest(), 현재 요청을 얻기 위해 getSession()모두 범위에 저장된 속성을 얻을 수있는 현재 세션과 다른 방법을 얻을 수 있습니다. 다음 코드는 약간 못 생겼지 만 응용 프로그램의 모든 위치에서 현재 요청 객체를 가져옵니다.

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

있습니다 RequestContextHolder.currentRequestAttributes()방법은 인터페이스 및 요구 사항을 반환에 typecasted 할 ServletRequestAttributes것을 구현 인터페이스를.


Spring Javadoc : RequestContextHolder | ServletRequestAttributes


답변

여기에서 제안한 HttpServletRequest대로 as a method param을 삽입 할 수도 있습니다 . 예 :

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


답변