由于 jackson-databind 版本不匹配导致的序列化错误?
Serialization errors due to jackson-databind version mismatch?
我运行陷入以下错误
java.lang.NoSuchFieldError: WRITE_DURATIONS_AS_TIMESTAMPS
at com.fasterxml.jackson.datatype.joda.ser.DurationSerializer.<init>(DurationSerializer.java:28)
at com.fasterxml.jackson.datatype.joda.ser.DurationSerializer.<init>(DurationSerializer.java:25)
at com.fasterxml.jackson.datatype.joda.JodaModule.<init>(JodaModule.java:45)
我查看了哪些版本的 jackson-datatype-joda 可用。看来 maven 已经排除了所有版本不匹配的问题。
这可能导致序列化错误的任何其他原因?
问题是在 Maven 依赖项中(注意它可能是一个传递依赖项)你有 jackson-datatype-joda 和 jackson 的不兼容版本-数据绑定。在某种意义上不兼容 jackson-databind 的 SerializationFeature class 缺少 WRITE_DURATIONS_AS_TIMESTAMPS 字段。要查看 maven 带来的依赖项,您可以 运行 在终端中执行以下命令(或者您可以使用 IDE 的 maven 插件来搜索和分析 maven 依赖项树):
mvn dependency:tree | grep databind
结果很可能是这样的:
[INFO] | +- com.fasterxml.jackson.core:jackson-databind:jar:2.4.1:compile
版本当然可以变化,但重要的是 WRITE_DURATIONS_AS_TIMESTAMPS 字段仅在版本 2.5 之后可用
您可以像这样排除传递依赖:
<dependency>
<groupId>group.id</groupId>
<artifactId>artifact-id</artifactId>
<version>${artifact.version}</version>
<exclusions>
<exclusion>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
</exclusion>
</exclusions>
</dependency>
如果它不是传递依赖项,您需要更新 jackson-databind.
的版本
我通过使用以下依赖项解决了它,因为此依赖项已覆盖使用的任何其他版本:
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-joda</artifactId>
<version>2.5.3</version>
</dependency>
我有同样的错误。我已将所有 jackson*2.7.0 库包含在 WEB-INF/lib/ 下,但我仍然收到该错误。我正在使用 wildfly 8.2,它在模块下有 jackson 2.4.1 库,并且它以某种方式从该位置加载 2.4.1 jar。所以我不得不手动将它们升级到 2.7.0 来解决这个问题。我的印象是,如果我没有提到在部署配置文件中加载 jackson jar,它就不会加载 wildfly jar。我想我错了。
我运行陷入以下错误
java.lang.NoSuchFieldError: WRITE_DURATIONS_AS_TIMESTAMPS
at com.fasterxml.jackson.datatype.joda.ser.DurationSerializer.<init>(DurationSerializer.java:28)
at com.fasterxml.jackson.datatype.joda.ser.DurationSerializer.<init>(DurationSerializer.java:25)
at com.fasterxml.jackson.datatype.joda.JodaModule.<init>(JodaModule.java:45)
我查看了哪些版本的 jackson-datatype-joda 可用。看来 maven 已经排除了所有版本不匹配的问题。
这可能导致序列化错误的任何其他原因?
问题是在 Maven 依赖项中(注意它可能是一个传递依赖项)你有 jackson-datatype-joda 和 jackson 的不兼容版本-数据绑定。在某种意义上不兼容 jackson-databind 的 SerializationFeature class 缺少 WRITE_DURATIONS_AS_TIMESTAMPS 字段。要查看 maven 带来的依赖项,您可以 运行 在终端中执行以下命令(或者您可以使用 IDE 的 maven 插件来搜索和分析 maven 依赖项树):
mvn dependency:tree | grep databind
结果很可能是这样的:
[INFO] | +- com.fasterxml.jackson.core:jackson-databind:jar:2.4.1:compile
版本当然可以变化,但重要的是 WRITE_DURATIONS_AS_TIMESTAMPS 字段仅在版本 2.5 之后可用
您可以像这样排除传递依赖:
<dependency>
<groupId>group.id</groupId>
<artifactId>artifact-id</artifactId>
<version>${artifact.version}</version>
<exclusions>
<exclusion>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
</exclusion>
</exclusions>
</dependency>
如果它不是传递依赖项,您需要更新 jackson-databind.
的版本我通过使用以下依赖项解决了它,因为此依赖项已覆盖使用的任何其他版本:
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-joda</artifactId>
<version>2.5.3</version>
</dependency>
我有同样的错误。我已将所有 jackson*2.7.0 库包含在 WEB-INF/lib/ 下,但我仍然收到该错误。我正在使用 wildfly 8.2,它在模块下有 jackson 2.4.1 库,并且它以某种方式从该位置加载 2.4.1 jar。所以我不得不手动将它们升级到 2.7.0 来解决这个问题。我的印象是,如果我没有提到在部署配置文件中加载 jackson jar,它就不会加载 wildfly jar。我想我错了。