如果我们在 /WEB-INF/lib 目录的 class 路径中同时拥有 jackson-jaxrs-json-provider 和 jersey-media-json-binding.jar 会怎样?

What happens if we have both jackson-jaxrs-json-provider and jersey-media-json-binding.jar in the class path at /WEB-INF/lib directory?

我正在开发一个由 Apache ant builder 管理的 Web 应用程序。我们最近将球衣从 2.17 升级到 2.35 以及 class 路径中的所有相关依赖项。升级后,我注意到一个错误,其中 PSOT 方法参数被填充为 null。

做了一些挖掘来解决这个问题,发现 jersey-media-json-binding.jar 可能是导致这个问题的原因。将其从 class 路径中删除,一切正常。

但我无法弄清楚为什么首先会导致这个问题,这个 jersey-media-json-binding.jar 库有什么用。

jersey-media-json-binding.jar 和 jackson-jaxrs-json-provider-2.12.2.jar 是否提供相同的功能,这导致问题?

JSON-B is the new default provider. If you have it on the classpath (without explicit registration of other providers), it will be used. The default used to be MOXy. If you want Jackson 无论哪个提供程序在类路径上,都可以使用,只需在您的应用程序中注册 JacksonFeature。所有这三个提供程序都用于 JSON 支持,但它们在(反)序列化方面都有不同的行为。此外,所有这些提供程序模块都有 auto-registration,这意味着您不必显式注册它们。但是 预定义的行为,即哪一个优先(如果存在多个)。因此,如果您想要使用特定的一个,而不管类路径中有哪些,只需注册其功能(即 JacksonFeatureJsonBindingFeatureMoxyJsonFeature)。