복붙노트

[SPRING] 현재 요청의 HttpServletRequest를 가져 오는 정적 인 방법이 있습니까?

SPRING

현재 요청의 HttpServletRequest를 가져 오는 정적 인 방법이 있습니까?

나는 Spring 어노테이션을 사용하고 있는데, 컨트롤러에서 HttpRequestContext를 전달할 수있다.

RequestContext를 전달하는 것보다 정적 인 방법이나 더 나은 해결책을 찾고있다.

해결법

  1. ==============================

    1.나는 이것이 좋은 생각이라고 생각하지 않는다. 서비스 계층은 HTTP 클라이언트를 처리하는지 여부를 몰라도됩니다.

    나는 이것이 좋은 생각이라고 생각하지 않는다. 서비스 계층은 HTTP 클라이언트를 처리하는지 여부를 몰라도됩니다.

    정적은 올바른 생각처럼 들리지도 않습니다. HttpRequestContext는 특정 클래스가 아닌 HttpRequest 인스턴스와 연결되어야합니다.

    내 생각에 더 나은 디자인은 컨텍스트에서 서비스가 필요로하는 것을 가져 와서 전달합니다. HTTP 또는 웹 레이어에 서비스를 연결할 필요가 없습니다.

  2. ==============================

    2.당신이 봄을 사용하는 경우 다음을 할 수 있습니다 :

    당신이 봄을 사용하는 경우 다음을 할 수 있습니다 :

    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;
    }
    
  3. ==============================

    3.또는 java8 방식

    또는 java8 방식

    public static Optional<HttpServletRequest> getCurrentHttpRequest() {
        return Optional.ofNullable(RequestContextHolder.getRequestAttributes())
            .filter(requestAttributes -> ServletRequestAttributes.class.isAssignableFrom(requestAttributes.getClass()))
            .map(requestAttributes -> ((ServletRequestAttributes) requestAttributes))
            .map(ServletRequestAttributes::getRequest);
    }
    
  4. from https://stackoverflow.com/questions/592123/is-there-a-static-way-to-get-the-httpservletrequest-of-the-current-request by cc-by-sa and MIT license