jersey+spring-servlet请求

cpjpxq1n  于 2021-07-12  发布在  Java
关注(0)|答案(1)|浏览(352)

我正在启动一个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 ,同样的道理。

uz75evzq

uz75evzq1#

您需要使用来自的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));

相关问题