Is there a static way to get the HttpServletRequest of the current request

后端 未结 4 2023
太阳男子
太阳男子 2020-12-13 18:04

I am using Spring annotations, I can pass the HttpRequestContext from the Controller to the Service.

I am looking for a static way or any better soluti

相关标签:
4条回答
  • 2020-12-13 18:38

    If you are using spring you can do the following:

    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;
    }
    
    0 讨论(0)
  • 2020-12-13 18:38

    In response to @andrebrait comments above "Or the Java 8 way", the methods are present on the ServletRequestAttributes.class

        public static Optional<HttpServletRequest> getCurrentHttpRequest() {
            return
                Optional.ofNullable(
                    RequestContextHolder.getRequestAttributes()
                )
                .filter(ServletRequestAttributes.class::isInstance)
                .map(ServletRequestAttributes.class::cast)
                .map(ServletRequestAttributes::getRequest);
        }
    
    0 讨论(0)
  • 2020-12-13 18:42

    For reference, this would be the Kotlin way:

        val currentRequest: HttpServletRequest?
            get() = (RequestContextHolder.getRequestAttributes() as? ServletRequestAttributes)?.request
    
    0 讨论(0)
  • 2020-12-13 19:02

    Or the java8 way

    public static Optional<HttpServletRequest> getCurrentHttpRequest() {
        return Optional.ofNullable(RequestContextHolder.getRequestAttributes())
            .filter(requestAttributes -> ServletRequestAttributes.class.isAssignableFrom(requestAttributes.getClass()))
            .map(requestAttributes -> ((ServletRequestAttributes) requestAttributes))
            .map(ServletRequestAttributes::getRequest);
    }
    
    0 讨论(0)
提交回复
热议问题