您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

如何将Grizzly请求注入Jersey ContainerRequestFilter

如何将Grizzly请求注入Jersey ContainerRequestFilter

令您惊讶的是,您甚至还运行了该应用程序,以至于您可以发现该请求为空。每当我尝试运行它时,我都会在启动时遇到异常,说没有请求范围,因此无法注入请求,这正是我所期望的。尽管我无法复制NPE,但我认为此解决方案仍然可以解决您的问题。

因此,它Request一个请求范围对象,因为它随每个请求而变化。但是过滤器的性质是单例。因此,您需要做的就是懒惰地检索它。为此,我们可以将javax.inject.Provider用作延迟检索机制。

回到我的第一段,这是我刚开始时遇到的例外

java.lang.IllegalStateException:不在请求范围内。

这是有道理的,因为Request需要与请求范围相关联,并且在启动时没有任何关联。请求范围仅在请求期间存在。

因此,使用Providerdo的目的是让我们尝试Request在存在请求范围时尝试抢占。

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());
    } 
}

我已经对此进行了测试,并且可以正常工作。

其他 2022/1/1 18:26:11 有545人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶