使用 Jackson 序列化和反序列化 java.time.LocalDateTime或LocalTime 类型报错
在使用 Jackson 序列化和反序列化 java.time.LocalDateTime
类型时,如果你遇到如下错误信息:
"Java 8 date/time type java.time.LocalDateTime
not supported by default: add Module "com.fasterxml.jackson.datatype:jackson-datatype-jsr310" to enable handling"
这是因为 Jackson 默认不支持 Java 8 的日期/时间类型,包括 java.time.LocalDateTime
。为了解决这个问题,你需要添加一个 Jackson 模块来支持 JSR 310 API,即 com.fasterxml.jackson.datatype:jackson-datatype-jsr310
模块。
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-jsr310</artifactId>
</dependency>
package com.pqkj.webserver.conf.webConfig;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.module.SimpleModule;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
import java.math.BigInteger;
import java.text.SimpleDateFormat;
import java.util.TimeZone;
/**
* @author XXX
* @date 2023/03/29 00:06
* 对象映射器:基于jackson将Java对象转为json,或者将json转为Java对象
* 将JSON解析为Java对象的过程称为 [从JSON反序列化Java对象]
* 从Java对象生成JSON的过程称为 [序列化Java对象到JSON]
*/
public class JacksonObjectMapper extends ObjectMapper {
public JacksonObjectMapper() {
this.registerModules(new JavaTimeModule());
}
}
在上述代码中,我们创建了一个 ObjectMapper 对象,并通过 registerModule()
方法注册了 JavaTimeModule
模块。这个模块提供了对 Java 8 的日期/时间类型的支持,包括 LocalDateTime
。
通过添加 jackson-datatype-jsr310
模块并注册到 ObjectMapper 中,你就可以在序列化和反序列化过程中正确处理 java.time.LocalDateTime
类型的字段了。
注意:确保你使用的是与你项目中的 Jackson 版本兼容的 jackson-datatype-jsr310
模块版本。
1 条评论
博主真是太厉害了!!!