【问题标题】:Do we still need JacksonFeature.class for Jersey 2.17 projects?Jersey 2.17 项目还需要 JacksonFeature.class 吗?
【发布时间】:2015-05-28 15:03:08
【问题描述】:

我一直想知道 Jersey 2.17 是否仍需要 JacksonFeature.class。我看不出 JacksonFeature.class 是否注册的代码之间的输出之间有任何区别。

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

所以我创建了一个非常简单的 Web 服务来再次测试 github link,记住移除所有移动部件并且仍然可以工作。那么我们还需要注册 JacksonFeature 吗?

【问题讨论】:

    标签: rest jersey jackson jersey-2.0


    【解决方案1】:

    是的,我不知道他们为什么使用 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(更高版本)版本来查看此更改。您将在 2.9 版(及更高版本)中看到 META-INF/services 文件 org.glassfish.jersey.internal.spi.Autodiscoverable(其中列出了 JacksonAutoDiscoverable 实现)。有了这个,该功能不需要显式配置,除非自动发现功能被禁用(可以显式这样做)。


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

    【讨论】:

    • 啊...现在一切都说得通了。谢谢!因此,在应用程序中注册要素类将是优化项目的一部分。但是当然,应该禁用自动发现的类路径扫描以注意差异。谢谢peeskillet!
    • 再次感谢!您添加的最新编辑很有价值。我永远不会猜到它在一个基于泽西岛的项目中涉及多少 MOXy。好东西!
    猜你喜欢
    • 1970-01-01
    • 2015-07-12
    • 2015-05-27
    • 2015-08-02
    • 2021-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-09-26
    相关资源
    最近更新 更多