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
相关产品推荐
相关产品推荐

