Jersey + Spring - 注入servlet请求

时间:2017-01-03 17:26:38

标签: java spring jersey grizzly

我正在按如下方式启动Grizzly服务器:

URI baseUri = UriBuilder.fromUri("http://localhost/").port(9998).build();

ResourceConfig resourceConfig = new ResourceConfig();
resourceConfig.packages("com.example");
resourceConfig.property("contextConfig", applicationContext);

HttpServer server = GrizzlyHttpServerFactory.createHttpServer(baseUri, resourceConfig, false);

server.start();

com.example 包中,我有以下过滤器:

@Component
@Provider
@Priority(0)
public class MyFilter implements ContainerRequestFilter {

    @Context
    private HttpServletRequest httpServletRequest;

    @Override
    public void filter(ContainerRequestContext requestContext) throws IOException {
        /* httpServletRequest is null here */
    }
}

我的过滤器按照Spring的预期实例化。此外,JAX-RS检测到它并使用Spring实例化的相同实例。我正在尝试访问基础HttpServletRequest,但我找不到。

我知道在将过滤器实例创建为代理之前,永远不会注入servlet请求,因为servlet请求是请求范围的。我尝试使用@RequestScope注释过滤器,同样的事情。

1 个答案:

答案 0 :(得分:2)

您需要使用

中的GrizzlyWebContainerFactory
<dependency>
    <groupId>org.glassfish.jersey.containers</groupId>
    <artifactId>jersey-container-grizzly2-servlet</artifactId>
    <version>${jersey2.version}</version>
</dependency>

如果要创建servlet容器。目前,您没有创建servlet容器,这就是没有HttpServletRequest可用的原因。

您可以执行类似

的操作
GrizzlyWebContainerFactory.create(baseUri, new ServletContainer(resourceConfig));