我正在使用 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/