gpt4 book ai didi

java - Jersey+Spring - 注入(inject) servlet 请求

转载 作者:行者123 更新时间:2023-12-02 03:08:06 25 4
gpt4 key购买 nike

我按如下方式启动 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 请求永远不会被注入(inject),因为 Servlet 请求是请求范围的。我尝试用 @RequestScope 注释过滤器,同样的事情。

最佳答案

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

关于java - Jersey+Spring - 注入(inject) servlet 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41449042/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com