杰克逊未能将字符串反序列化为 Joda-Time

Posted

技术标签:

【中文标题】杰克逊未能将字符串反序列化为 Joda-Time【英文标题】:Jackson fails on deserializing String to Joda-Time 【发布时间】:2018-08-27 21:44:43 【问题描述】:

我正在使用 Spring Boot 1.5.6 和 Jackson 2.8.8。在反序列化 REST 调用的应答时,Jackson 失败并出现以下异常:

JSON 解析错误:无法构造 org.joda.time.DateTime 的实例:没有从字符串值反序列化的字符串参数构造函数/工厂方法 ('2018-03-19T12:05:21.885+01:00')

确实没有 String 构造函数,只有 DateTime 对象中的 Object 构造函数。

我在 build.gradle 文件中包含了 jackson-datatype-joda 依赖项。这些是 build.gradle 中的相应行:

compile group: 'com.fasterxml.jackson.core', name: 'jackson-core', version: jacksonVersion
compile group: 'com.fasterxml.jackson.core', name: 'jackson-databind', version: jacksonVersion
compile group: 'com.fasterxml.jackson.dataformat', name: 'jackson-dataformat-yaml', version: jacksonVersion
compile group: 'com.fasterxml.jackson.datatype', name: 'jackson-datatype-hibernate5', version: jacksonVersion
compile group: 'com.fasterxml.jackson.datatype', name: 'jackson-datatype-joda', version: jacksonVersion

我需要做任何额外的配置吗?

PS:如果我将日期字符串放入new DateTime("2018-03-19T12:05:21.885+01:00"),它就可以正常工作。

有什么想法吗?干杯!

【问题讨论】:

请添加完整的异常堆栈跟踪和ObjectMapper 配置。否则就是猜测。 【参考方案1】:

您是否在您的ObjectMapper 中注册了JodaModule 模块?

ObjectMapper mapper = new ObjectMapper();
mapper.registerModule(new JodaModule());

【讨论】:

【参考方案2】:

当我在 build.gradle 中添加以下依赖项时,它对我有用

编译组:'com.fasterxml.jackson.datatype',名称:'jackson-datatype-joda'

【讨论】:

以上是关于杰克逊未能将字符串反序列化为 Joda-Time的主要内容,如果未能解决你的问题,请参考以下文章

杰克逊将单个项目反序列化为列表

使用 Jackson 进行 DateTime 反序列化的默认时区(Joda-Time 模块)

反序列化的改造/杰克逊错误

杰克逊:反序列化为每个值都具有正确类型的 Map<String, Object>

为日期反序列化设置杰克逊时区

如何用杰克逊反序列化空字符串?