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

Jersey 您可以在JAX-RS中的singleton ContextResolver中使用请求范围的@Context变量吗?,jersey,jax-rs,Jersey,Jax Rs,我用的是1.13号球衣和弹簧。我有一个ContextResolver,定义如下: @Provider public class ThemeSourceContextResolver implements ContextResolver<ThemeSource> { @Context private HttpServletRequest request; @Override public ThemeSource getContext(Class<?&g

我用的是1.13号球衣和弹簧。我有一个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" />
@Provider
公共类ThemeSourceTextResolver实现ContextResolver{
@上下文私有HttpServletRequest;
@凌驾
公共主题资源getContext(类类型){
返回新的默认主题资源(请求);
}
}

上述条款有效吗?具体来说,在ContextResolver中使用
@Context-private HttpServletRequest请求
是否“合法”(或有意义)?由于ContextResolver是一个单例,Jersey/JAX-RS是否执行了一些threadlocal代理魔法或其他操作来允许它访问每个请求的HttpServletRequest?

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

要为Jersey 2.14更新此答案,请执行以下操作:

现在的答案是“有时”。Jersey确实为特定的@Context变量(即HttpHeaders、Request、UriInfo和SecurityContext)提供了代理魔法。您的特定案例HttpServletRequest不受支持


请参阅。

我在Jersey 1.19中使用了
ContextResolver
来链接提供程序并在它们之间传递值。但它在2.x中似乎不起作用。