我有灰熊提供的球衣。
我有一个容器请求过滤器
实现类。但是,为所有传入请求创建一次此类。因此,这样做:
public class EndpointRequestFilter implements ContainerRequestFilter {
@Context
private org.glassfish.grizzly.http.server.Request requestContext;
public void filter( ContainerRequestContext req ) throws IOException {
// remove for sake of example
}
}
requestContext
为空。我可以将上下文注入到被调用的实际endpoint中,但这相当粗糙和丑陋,对我来说真的没有用;因为我希望记录各种请求。理想情况下,希望在请求的ResponseFilter端找到这个Request
对象。
必须有一种简单的方法来做到这一点。到目前为止,我看到的所有问题/答案都不适用于灰熊,或者注入了RESTendpoint调用的方法。我不希望仅仅因为我想获得IP地址,就绕过我所有的数百种方法在调用中添加它!
那么这里的关键是什么?我错过了什么?
我很惊讶你竟然让应用程序运行起来,以至于你可以发现请求为空。每当我尝试运行它时,我都会在启动时收到一个异常,说没有请求范围,因此无法注入请求,这正是我所期望的。虽然我无法复制NPE,但我认为此解决方案仍能解决您的问题。
因此< code>Request是一个请求范围的对象,因为它在每次请求时都会改变。但是过滤器本质上是单一的。所以你需要做的,是懒洋洋地取回它。为此,我们可以使用< code > javax . inject . provider 作为一种惰性检索机制。
回到我第一段的观点,这是我在启动时得到的例外。
java.lang.IllegalStateException:不在请求范围内。
这是有道理的,因为请求
需要与请求范围相关联,而在启动时,没有。请求范围仅在请求期间存在。
因此,使用Provider
所做的是,当存在请求作用域时,允许我们尝试获取请求
。
public static class Filter implements ContainerRequestFilter {
@Context
private javax.inject.Provider<Request> requestProvider;
@Override
public void filter(ContainerRequestContext requestContext) throws IOException {
final Request request = requestProvider.get();
System.out.println(request.getRemoteAddr());
}
}
我已经对此进行了测试,它按预期工作。
另请参见:
在Jersey 1.x中,我们从一个(Jersey)会话属性访问Wicket会话,如这里https://stackoverflow.com/a/15767824/1399659.所述 在迁移到Jersey 2.x时,使用ContainerRequestFilter似乎是合适的模式,它还允许Springbean注入。我们通过包括 作为 Servlet 容器的初始化参数,并在容器请求筛选实现上使用@P
这件事已经做了几个小时了,似乎什么也做不成。它是Jersey 2.23.2。我想将一个基于请求的Hibernate会话注入Jersey提供程序,以便在我的REST API中使用。相反,我得到的是: 这是我的代码: 我已经尝试了上百种排列方式。不知疲倦地在网上搜索。因为我一直没有明确地看着这个问题,所以我认为它一定很简单。 当我在 AbstractBinder 配置方法中指定单例而不是请求范围时,我
我不知道为什么我不能为注册用户发布数据,我需要一些其他的东西,比如解析或者....请帮助我,谢谢
我有一个基于令牌的用户身份验证的Jersey REST应用程序。当请求传入时,会创建一个自定义的对象,并将其作为一个属性添加到 的用法,我想知道是否可以使用injection将这个< code>RestContext注入到我的资源和其他过滤器中(例如,我有一个过滤器,它从< code>RestContext中创建一个< code>SecurityContext),但是我找不到答案。一般来说,我如何
问题内容: 我正在尝试编写一个使用Jersey客户端API访问RESTful Web服务的库。该服务需要设置cookie的登录请求,然后后续请求必须将该cookie设置为成功。登录请求按预期方式工作,我能够从登录响应中检索cookie,但似乎无法在后续请求中重新添加cookie。谁能说出我可能做错了什么。这是发出请求的代码: 当请求没有失败时,服务将以应用程序错误“ No Session”进行响应
我试图理解异步响应在Jersey上的工作方式。我阅读了新泽西文档(https://jersey.java.net/documentation/latest/async.html)的第10章,但它对我的问题没有帮助。这里关于stackoverflow的研究也没有得出令人满意的答案(这一点我可以理解)。 我试图做的与本文中的一个问题类似(使用http状态202进行异步操作)。我想使用HTML表单文档将