我一直想知道 Jersey 2.17 是否仍然需要 JacksonFeature.class。我看不出 JacksonFeature.class 是否注册的代码之间的输出之间有任何区别。
然后,我从 codingpedia codingpedia fork 了一个代码。 ,移除 JacksonFeature.class,升级到 Spring 4.1.2 和 jersey 2.17,更新代码,测试仍然通过。
所以我创建了一个非常简单的 Web 服务来再次测试 github link ,请记住卸下所有事件部件并且仍然可以工作。那么我们还需要注册 JacksonFeature 吗?
最佳答案
是的,我不知道他们为什么使用 Jersey 2.9 的教程,但是对于 jersey-media-json-jackson
神器,他们使用的是2.4.1。通常,您应该保持 Jersey(相关工件)版本相同。在实际Github Project ,作者将其更改为使用项目的${jersey.version}
(即 2.14),这更有意义。
但要回答您的主要问题,从版本 2.9 开始,jersey-media-json-jackson
模块,参与AutoDiscoverable classpath scanning ,其中涉及Java's Service Provider mechanism .您可以通过来回切换到此模块的 2.8 版本和 2.9(更高版本)版本来查看此更改。您将在 META-INF/services
中看到,文件org.glassfish.jersey.internal.spi.Autodiscoverable
(其中列出了 JacksonAutoDiscoverable
实现),在 2.9 版(及更高版本)中。这样,不需要显式配置该功能,除非禁用自动发现功能(可以显式执行)。
为了完整起见,当您在类路径上有 MOXy 并且您没有显式注册 Jackson 功能时,将使用 MOXy,因为 MOXy 是默认提供程序。即使您可能没有对 MOXy 的显式依赖,但在使用 Glassfish 服务器的情况下,它具有 MOXy 工件,在这种情况下,我们可以显式注册自动禁用 MOXy 的 Jackson 功能,或者我们可以显式禁用MOXy 与属性 ServerProperties.MOXY_JSON_FEATURE_DISABLE设置为真
关于rest - Jersey 2.17 项目还需要 JacksonFeature.class 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29247251/