programing

봄에 현재 HttpServletRequest를 가져오는 정적인 방법이 있습니까?

lastmoon 2023. 7. 26. 22:21
반응형

봄에 현재 HttpServletRequest를 가져오는 정적인 방법이 있습니까?

Spring 주석을 사용하고 있습니다. 다음을 통과할 수 있습니다.HttpRequestContext컨트롤러에서 서비스로 이동합니다.

저는 정적인 방법이나 합격보다 더 나은 해결책을 찾고 있습니다.RequestContext주위에.

스프링을 사용하는 경우 다음 작업을 수행할 수 있습니다.

public static HttpServletRequest getCurrentHttpRequest(){
    RequestAttributes requestAttributes = RequestContextHolder.getRequestAttributes();
    if (requestAttributes instanceof ServletRequestAttributes) {
        HttpServletRequest request = ((ServletRequestAttributes)requestAttributes).getRequest();
        return request;
    }
    logger.debug("Not called in the context of an HTTP request");
    return null;
}

아니면 java8 방식.

public static Optional<HttpServletRequest> getCurrentHttpRequest() {
    return Optional.ofNullable(RequestContextHolder.getRequestAttributes())
        .filter(ServletRequestAttributes.class::isInstance)
        .map(ServletRequestAttributes.class::cast)
        .map(ServletRequestAttributes::getRequest);
}

알아요, 그것은 이미 답입니다.새로운 업데이트로 표시하고 싶습니다.주사를 놓을 수 있습니다.HttpServletRequest을 이용하여@Autowired에서 정상적으로 작동합니다.springboot.

@Autowired
private HttpServletRequest httpServletRequest;

참고로 코틀린 방법은 다음과 같습니다.

    val currentRequest: HttpServletRequest?
        get() = (RequestContextHolder.getRequestAttributes() as? ServletRequestAttributes)?.request

"또는 Java 8 way" 위의 @andreback 의견에 대응하여, 방법은ServletRequestAttributes.class

    public static Optional<HttpServletRequest> getCurrentHttpRequest() {
        return
            Optional.ofNullable(
                RequestContextHolder.getRequestAttributes()
            )
            .filter(ServletRequestAttributes.class::isInstance)
            .map(ServletRequestAttributes.class::cast)
            .map(ServletRequestAttributes::getRequest);
    }

추가할 수 있습니다.HttpServletRequest컨트롤러 핸들러 메서드의 매개 변수로 사용할 수 없습니다.다음과 같이:

@GetMapping("/hello")
public String hello(HttpServletRequest request) {
    //...
    return "Hello world!";
}

지원되는 컨트롤러 메서드 인수 및 반환 유형 목록은 https://docs.spring.io/spring-framework/docs/current/reference/html/web.html#mvc-ann-methods 에서 확인할 수 있습니다.

이것이 제게 맞는 일입니다.

HttpServletRequest request = 
    ((ServletRequestAttributes) Objects.requireNonNull(
        RequestContextHolder.getRequestAttributes()))
    .getRequest();

언급URL : https://stackoverflow.com/questions/592123/is-there-a-static-way-to-get-the-current-httpservletrequest-in-spring

반응형