Jersey 2:我的ApplicationEventListener被忽略了。我该如何解决这个问题?

时间:2018-01-19 23:28:17

标签: java jersey jersey-2.0

我正在使用球衣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多余吗?

1 个答案:

答案 0 :(得分:1)

侦听器需要使用@Provider进行注释。这就是包扫描正在寻找的内容:使用@Path@Provider注释的类。它会注册它找到的所有类。

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