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

时间:2015-03-25 04:06:06

标签: 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 link,考虑到删除所有移动部件并仍然有效。那么我们还需要注册JacksonFeature吗?

1 个答案:

答案 0 :(得分:9)

是的,我不知道为什么他们使用的是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工件,在这种情况下我们可以显式注册Jackson功能,它会自动禁用MOXy,或者我们可以明确禁用MOXy属性ServerProperties.MOXY_JSON_FEATURE_DISABLE设置为true