web-dev-qa-db-ja.com

現在のリクエストのHttpServletRequestを取得する静的な方法はありますか?

Springアノテーションを使用しています。コントローラーからサービスにHttpRequestContextを渡すことができます。

RequestContextを渡すよりも静的な方法またはより良い解決策を探しています。

25
Spring Monkey

スプリングを使用している場合は、次のことができます。

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;
}
60
Abbadon

または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);
}
6
Panthro