SpringBoot 2.3 中带有 Maven 的 Jackson 版本

Max*_*axL 3 java jackson maven spring-boot jackson-databind

当我将我的项目从 SpringBoot 2.2.7 更新到 2.3.0 时,启动时遇到以下错误:

Caused by: java.lang.ClassNotFoundException: com.fasterxml.jackson.databind.ser.std.ToStringSerializerBase
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:602) ~[na:na]
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178) ~[na:na]
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522) ~[na:na]
Run Code Online (Sandbox Code Playgroud)

更新后,我在 Eclipse 中没有看到任何错误。我指定我不直接在我的 pom.xml 中使用 Jackson,而是只使用它的外部包(来自 mvnrepository.com)。

所以我认为这与 Jackson 从 2.10 到 2.11 的升级有关,并且可能与来自外部包的 Maven 依赖有关(例如 jjwt-jackson 使用 2.9)。

在 pom.xml 中,我看到了这个:

之前(SpringBoot 2.9.7): 在此处输入图片说明

之后(SpringBoot 2.3.0): 在此处输入图片说明

我的解释是否正确?是否有 pom.xml(或其他任何东西)的解决方案来解决此类问题?

Kar*_*cki 5

看起来您正在混合三种不同的 Jackson 版本:

  • 2.9 例如 jackson-databind-2.9.10.3
  • 2.10 例如 jackson-dataformat-yaml-2.10.1
  • 2.11 例如 jackson-datatype-jdk8-2.11.0

这是行不通的,您必须使用相同的 Jackson 版本。您丢失的特殊问题ToStringSerializerBase来自将 2.9 与 2.10+ 一起使用。

  • 您不应该混合具有不同传递依赖项的库。仅仅因为它们发布到 Maven Central 并不意味着它们将**一起**。 (3认同)