SpringBoot 2.5.4 actuator/startup响应时间格式与官方不一致问题
问题原因
Spring Boot 2.5.4版本的/actuator/startup端点,默认序列化逻辑和官方文档描述不一致。这是因为该版本里BufferingApplicationStartup收集的时间数据,在序列化时直接输出了Java Instant、Duration类型的内部结构(拆成seconds和nanos字段),而没有转换成标准的ISO-8601格式(比如yyyy-MM-dd'T'HH:mm:ss.SSSXXX时间格式、PTxHyMzS时长格式)。
官方文档的格式描述其实是基于更高版本(2.6+)的行为,后续Spring Boot版本优化了这个端点的序列化逻辑,统一输出标准ISO格式。
解决办法
有两种方式可以拿到符合官方文档格式的响应:
方式一:自定义Jackson序列化配置
通过配置Jackson模块,让Instant和Duration类型序列化为ISO格式:
- 创建一个配置类,注册对应的序列化器:
import com.fasterxml.jackson.databind.module.SimpleModule; import com.fasterxml.jackson.datatype.jsr310.ser.InstantSerializer; import com.fasterxml.jackson.datatype.jsr310.ser.DurationSerializer; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.http.converter.json.Jackson2ObjectMapperBuilder; @Configuration public class JacksonConfig { @Bean public Jackson2ObjectMapperBuilder jackson2ObjectMapperBuilder() { Jackson2ObjectMapperBuilder builder = new Jackson2ObjectMapperBuilder(); SimpleModule module = new SimpleModule(); module.addSerializer(Instant.class, InstantSerializer.INSTANCE); module.addSerializer(Duration.class, DurationSerializer.INSTANCE); builder.modules(module); return builder; } }
- 重启应用后再请求
/actuator/startup,返回的时间和时长就会变成标准ISO格式。
方式二:升级Spring Boot版本
直接把Spring Boot版本升到2.6.x及以上,这个版本已经修复了序列化差异的问题,默认就会输出符合官方文档的ISO格式,不需要额外配置。
内容的提问来源于stack exchange,提问作者william
相关产品推荐
相关产品推荐

