对于Jersey 2.17项目,我们还需要JacksonFeature.class吗?

Fra*_*ala 8 rest jersey jackson jersey-2.0

我一直试图知道Jersey 2.17是否还需要JacksonFeature.class.我看不出JacksonFeature.class注册的代码之间的输出有什么区别.

然后,我从codingpedia codingpedia分叉代码,删除JacksonFeature.class,升级到Spring 4.1.2和jersey 2.17,更新代码并且测试仍然通过.

所以我创建了一个非常简单的Web服务来再次测试github链接,考虑到删除所有移动部件并仍然工作.那么我们还需要注册JacksonFeature吗?

Pau*_*tha 9

是的我不知道他们为什么使用Jersey 2.9,但对于jersey-media-json-jackson工件,他们使用的是2.4.1.通常,您应该保持Jersey(相关工件)版本相同.在实际的Github项目中,作者将其更改为使用项目${jersey.version}(2.14),这更有意义.

但要回答您的主要问题,从版本2.9开始,该jersey-media-json-jackson模块将参与AutoDiscoverable类路径扫描,该扫描涉及Java的服务提供程序机制.您可以通过来回切换到此模块的2.8版本和2.9(向上)版本来查看此更改.您将在版本2.9(及更高版本)中看到META-INF/services文件org.glassfish.jersey.internal.spi.Autodiscoverable(列出JacksonAutoDiscoverable实现).这样,除非禁用了可自动发现的功能(可以明确地执行此操作),否则不需要显式配置该功能.


而且为了完整性,当你在类路径上有MOXy,并且没有明确注册Jackson功能时,将使用MOXy,因为MOXy是默认提供者.即使您可能没有明确依赖MOXy,在使用Glassfish服务器的情况下,它也有MOXy工件,在这种情况下我们可以显式注册Jackson功能,它会自动禁用MOXy,或者我们可以明确禁用将属性ServerProperties.MOXY_JSON_FEATURE_DISABLE设置为true的MOXy