您可以在JAX-RS中的单一ContextResolver中使用请求范围的@Context变量吗?

时间:2012-12-06 03:46:09

标签: jersey jax-rs

我在使用Jersey 1.13和Spring。我有一个ContextResolver定义如下:

@Provider
public class ThemeSourceContextResolver implements ContextResolver<ThemeSource> {

    @Context private HttpServletRequest request;

    @Override
    public ThemeSource getContext(Class<?> type) {
        return new DefaultThemeSource(request);
    }
}


<bean id="themeSourceContextResolver" scope="singleton" class="com.example.ThemeSourceContextResolver" />

以上是否有效?具体来说,在ContextResolver中使用@Context private HttpServletRequest request是“合法的”(或者是否有意义)?由于ContextResolver是一个单例,Jersey / JAX-RS是否会执行一些threadlocal代理魔术或某些东西以允许它访问每个请求的HttpServletRequest?

2 个答案:

答案 0 :(得分:0)

无效。 @Context仅注入JAX-RS资源。 ContextResolver<?>与请求上下文无关,主要是因为它是一个单例,正如你所说。

答案 1 :(得分:0)

更新Jersey 2.14的答案:

答案现在是&#34;有时&#34;。 Jersey确实为特定的@Context变量做了代理魔术,即HttpHeaders,Request,UriInfo和SecurityContext。您的具体案例HttpServletRequest 支持。

请参阅https://jersey.java.net/documentation/latest/jaxrs-resources.html#d0e2578