我在使用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?
答案 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。