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

LocalDateTime序列化变整数数组问题排查与解决咨询

LocalDateTime序列化格式异常:数组转ISO字符串问题分析与解决

问题原因

核心问题出在生产者端的Jackson序列化配置缺失:

  • Jackson默认情况下,如果未注册JavaTimeModule,会将LocalDateTime类型序列化为整数数组(年、月、日、时、分、秒),这就是你看到"dtEmissao":[2023,4,5,8,39,36]的原因。
  • 你的消费者端已经正确配置了JavaTimeModule并禁用了WRITE_DATES_AS_TIMESTAMPS,但生产者未做对应配置,导致传输的JSON中该字段是数组格式。

修复方案

需要在生产者端添加Jackson的JavaTime模块配置,确保LocalDateTime序列化为标准ISO字符串格式:

代码配置方式

在生产者项目中定义ObjectMapper Bean:

@Bean
public ObjectMapper producerObjectMapper() {
    ObjectMapper objectMapper = new ObjectMapper();
    // 注册Java 8时间模块,支持LocalDateTime等类型的序列化/反序列化
    objectMapper.registerModule(new JavaTimeModule());
    // 禁用时间戳序列化,强制输出ISO 8601格式字符串
    objectMapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
    // 可选:忽略null字段
    objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
    return objectMapper;
}

Spring Boot配置文件方式

如果使用Spring Boot,也可以通过配置文件直接设置:

# application.properties
spring.jackson.serialization.write-dates-as-timestamps=false
spring.jackson.modules=com.fasterxml.jackson.datatype.jsr310.JavaTimeModule

处理端选择

必须在生产者端处理。因为问题的本质是生产者输出的JSON格式不符合预期,消费者的配置已经正确,只要生产者输出标准ISO字符串,消费者就能自动将其反序列化为LocalDateTime对象。

内容的提问来源于stack exchange,提问作者Rômulo Sorato

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 04:27:45