使用 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 模块版本。

最后修改:2023 年 11 月 30 日
如果觉得我的文章对你有用,请随意赞赏