Spring Boot YAML配置LocalTime属性解析异常求助
问题原因及解决方案
原因分析
YAML解析器会将不带引号的14:00解析为整数类型(对应总分钟数:14*60=840),而你的配置类中用LocalTime接收该值,Spring框架找不到从Integer到LocalTime的内置转换器,因此抛出类型转换异常。
解决方案
方案1:给配置值加引号(最简方案)
修改application.yml,将时间值用双引号包裹,强制YAML将其解析为字符串,Spring自带的字符串转LocalTime转换器就能正常工作:
hour: "14:00"
方案2:规范配置属性前缀(可选但推荐)
给@ConfigurationProperties添加前缀,避免配置键冲突,同时配套调整YAML结构:
配置类代码:
@Getter @Setter @Configuration @ConfigurationProperties(prefix = "schedule") public class CcScheduleConfig { private LocalTime hour; }
application.yml配置:
schedule: hour: "14:00"
方案3:自定义类型转换器(不推荐,仅特殊场景使用)
如果不想加引号,可以自定义转换器,将YAML解析出的整数(总分钟数)转换为LocalTime:
@Component public class IntegerToLocalTimeConverter implements Converter<Integer, LocalTime> { @Override public LocalTime convert(Integer source) { return LocalTime.of(source / 60, source % 60); } }
这种方式依赖YAML的解析逻辑,稳定性不如加引号的方案。
内容的提问来源于stack exchange,提问作者thmasker
相关产品推荐
相关产品推荐

