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

如何修复Spring Boot中Jackson Java 8日期时间类型报错问题?

解决Spring Boot中Java 8日期类型序列化/反序列化问题

针对你遇到的java.time.LocalDateTime序列化报错问题,即便添加了jackson-datatype-jsr310依赖仍未解决,可按以下步骤排查修复:

1. 优化依赖配置,避免版本冲突

Spring Boot 2.6.7自带的Jackson版本为2.13.x,你手动指定的版本2.13.3是匹配的,但更稳妥的方式是借助Spring Boot的依赖管理自动控制版本,移除手动指定的版本号:

implementation 'com.fasterxml.jackson.datatype:jackson-datatype-jsr310'

修改后刷新Gradle依赖,确保依赖正确导入。

2. 配置Jackson启用JSR310模块

添加依赖后,还需要确保Jackson正确加载该模块,以下是几种常用配置方式:

方式一:通过配置文件全局配置

在application.properties(或application.yml)中添加Jackson相关配置,Spring Boot会自动为默认的ObjectMapper注册JSR310模块:

# 关闭日期转时间戳,输出ISO格式字符串
spring.jackson.serialization.write-dates-as-timestamps=false
# 禁用时区自动调整,保持原时间信息
spring.jackson.deserialization.adjust-dates-to-context-time-zone=false

方式二:自定义Jackson配置类

如果需要更灵活的配置,可以创建配置类手动注册模块:

import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class JacksonConfig {
    @Bean
    public ObjectMapper objectMapper() {
        ObjectMapper objectMapper = new ObjectMapper();
        // 注册Java 8日期时间模块
        objectMapper.registerModule(new JavaTimeModule());
        // 可选:设置日期输出为ISO格式而非时间戳
        objectMapper.disable(com.fasterxml.jackson.databind.SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
        return objectMapper;
    }
}

方式三:在实体类字段上添加注解

如果仅需针对个别字段配置,可以在LocalDateTime字段上添加序列化/反序列化注解:

import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer;
import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer;

// 实体类示例
public class YourEntity {
    // ...
    @JsonSerialize(using = LocalDateTimeSerializer.class)
    @JsonDeserialize(using = LocalDateTimeDeserializer.class)
    private LocalDateTime createTime;
    // getter/setter
}

3. 检查手动创建的ObjectMapper

如果项目中有手动创建ObjectMapper的代码,需要确保这些实例也注册了JavaTimeModule,不要使用未配置的默认ObjectMapper。

完成以上配置后,重启应用测试即可解决LocalDateTime的序列化/反序列化问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 07:45:38