java - Jersey 2 : My ApplicationEventListener is being ignored. 如何解决此问题?

标签 java jersey jersey-2.0

我正在使用 jersey 2。这是一个不是我自己设置的应用程序。我按照这个答案中的说明进行操作:https://stackoverflow.com/a/33271754

但是,这没有做任何事情。我在每个方法上都设置了断点,无论是在启动时还是在抛出异常时,都不会调用它们。我用谷歌搜索了一下,发现我需要在 web.xml 中使用如下行注册它:

  <servlet>
        <servlet-name>jersey-serlvet</servlet-name>
        <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
        <init-param>
             <param-name>jersey.config.server.provider.packages</param-name>
             <param-value>com.mypackage.rest</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>

但是,我的 ExceptionLogger 已经在该包中了。官方文档给出了 ResourceConfig 类的示例,但该类在我的项目中不存在(尽管应用程序运行良好)。

我不一定要问我做错了什么,我想知道如何从 Jersey 2 中获取一些信息,以便我可以解决我做错的问题。它在启动时不会输出任何日志,但当我点击它时,该应用程序似乎运行良好。是否有一个我可以设置的属性,它会打印有关如何搜索诸如 ApplicationEventListener 之类的内容的调试信息?

更新

我想出了解决办法。我需要将其添加到我的 web.xml 中:

  <init-param>
      <param-name>jersey.config.server.provider.classnames</param-name>
      <param-value>org.glassfish.jersey.filter.LoggingFilter;com.mypackage.rest.ExceptionLogger</param-value>
  </init-param>

有人可以向我解释为什么 .packages 参数不会使 .classnames 变得多余吗?

最佳答案

监听器需要用@Provider注释。这就是包扫描要查找的内容:用 @Path@Provider 注释的类。它注册所有找到的类。

当您使用时,您不需要使用@Provider,因为您明确告诉 Jersey 要注册哪些类。

关于java - Jersey 2 : My ApplicationEventListener is being ignored. 如何解决此问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48350977/

相关文章:

java - 具有 2 位小数的浮点值

java - 如何使用spring mvc在浏览器中下载文件?

java - 为什么我在尝试从 Stormpath 获取 OAuth2 key 时收到 com.stormpath.sdk.lang.InstantiationException?

java - Jersey/Jax-RS 如何在资源中选择正确的方法

java - 如何在 Java RS json 响应中为简单列表类型设置自定义名称

c# - Java只是没有跟上吗?

Java:如何打印数组? "cannot find symbol"

java - Jersey 2 过滤器在客户端请求过滤器中使用容器请求上下文

java - 带 Jersey 的 JAX-RS 无法在 JBoss AS 中工作

java - 如何在 Jersey 2 中禁用依赖注入(inject)?