我正在使用球衣2.这是我自己没有设置的应用程序。我按照这个答案中的说明进行了操作:https://stackoverflow.com/a/33271754
但是,这没有做任何事情。我在每个方法上都放置了断点,无论是在启动时还是抛出异常,都不会调用它们。我用Google搜索了一下,然后读到我需要在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类的示例,但是我的项目中不存在该类(尽管应用程序运行良好)。
我不一定要问我做错了什么,我想知道如何从泽西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
多余吗?
答案 0 :(得分:1)
侦听器需要使用@Provider
进行注释。这就是包扫描正在寻找的内容:使用@Path
或@Provider
注释的类。它会注册它找到的所有类。
当您使用classes
时,您不需要使用@Provider
,因为您明确告诉Jersey要注册哪些类。