Jersey 您可以在JAX-RS中的singleton ContextResolver中使用请求范围的@Context变量吗?
我用的是1.13号球衣和弹簧。我有一个ContextResolver,定义如下: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
@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中似乎不起作用。