有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

javajersey+Spring注入servlet请求

我正在启动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中。例如,我有如下过滤器:

@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) 个答案

  1. # 1 楼答案

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