0

我正在使用带有 Spring 的 Jersey 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" />

以上有效吗?@Context private HttpServletRequest request具体来说,在 ContextResolver中使用它是否“合法”(或有意义) ?由于 ContextResolver 是一个单例,Jersey/JAX-RS 是否会做一些线程本地代理魔术或其他什么来允许它访问每个请求的 HttpServletRequest?

4

2 回答 2

0

要更新 Jersey 2.14 的这个答案:

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

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

于 2015-01-30T02:29:19.347 回答
0

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

于 2012-12-07T13:12:55.420 回答