You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Jackson序列化/反序列化Joda DateTime失败问题求助

解决Joda DateTime序列化失败及NoSuchFieldError问题

我来帮你捋一捋这个问题,折腾这么久肯定头疼了吧!核心问题其实出在Jackson依赖版本不匹配上,你遇到的NoSuchFieldError和序列化失败都和这个直接相关。

1. 先修复依赖版本不一致的问题

你当前的Gradle配置里,jackson-datatype-joda用的是2.9.4,但jackson-core是2.9.5——Jackson的所有核心组件(core、databind、datatype-joda等)必须严格保持版本一致,否则会出现类、字段找不到的兼容性问题,比如那个ADJUST_DATES_TO_CONTEXT_TIME_ZONE字段,就是因为版本不匹配才找不到的。

另外,你还漏掉了jackson-databind依赖(ObjectMapper就来自这个包),虽然可能间接引入,但显式声明能避免版本冲突。修正后的Gradle配置应该是这样:

compile 'joda-time:joda-time:2.9.4'
compile 'com.fasterxml.jackson.core:jackson-core:2.9.4'
compile 'com.fasterxml.jackson.core:jackson-databind:2.9.4'
compile 'com.fasterxml.jackson.datatype:jackson-datatype-joda:2.9.4'

如果可以的话,也建议升级到更稳定的Jackson版本(比如2.15.x),只要和joda-time 2.9.4兼容就行,新版本能修复不少老bug。

2. 调整ObjectMapper配置(版本统一后生效)

版本统一后,你之前尝试设置的ADJUST_DATES_TO_CONTEXT_TIME_ZONE就不会报错了。不过要注意,这是反序列化阶段的配置,如果你只是序列化DateTime有问题,其实可以先不用加;如果反序列化时时区有问题,再添加这个配置:

ObjectMapper mapper = new ObjectMapper();
mapper.registerModule(new JodaModule());
// 反序列化时区配置(按需添加)
mapper.configure(DeserializationFeature.ADJUST_DATES_TO_CONTEXT_TIME_ZONE, false);

3. 验证Book类的注解

你的Book类注解(@JsonProperty、@JsonInclude这些)都没问题,只要依赖修复,DateTime的序列化/反序列化应该就能正常工作了。

按照上面的步骤调整后,再运行你的测试代码,应该就能成功把DateTime序列化为JSON,也能反序列化回来啦。如果还有问题,可以仔细看一下控制台的异常栈,看看是不是有其他被掩盖的错误。

内容的提问来源于stack exchange,提问作者Ariel Grabijas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 10:01:07