Spring Boot @ConfigurationProperties读取yml List配置报错
问题原因
报错的核心触发点是application.yml存在YAML语法错误:YAML语法强制要求配置键的冒号和值之间必须保留半角空格,你当前配置里的ip:123、path:xyz这类写法没有在冒号后加空格,导致Spring将ip:123 path:xyz整体识别为单个字符串,无法将其转换为Server类型对象,最终抛出无对应类型转换器的异常。
除此之外你的代码还有两处冗余问题:
Server类作为配置绑定的普通POJO,不需要加@Component注解注册为独立Spring Bean,多余的注解反而可能引发组件扫描冲突ApplicationServer类已经加了@Component注解,不需要再在启动类上重复声明@EnableConfigurationProperties(ApplicationServer.class),二者选其一即可生效。
修复方案
1. 修正YAML配置语法
给所有配置项的冒号后补充空格,正确配置如下:
application: servers: - ip: 123 path: xyz - ip: 456 path: abc - ip: 789 path: pqrs
2. 调整Server类代码
删除多余的@Component注解,保留普通Java类结构和getter/setter即可:
public class Server { private String ip; private String path; public String getIp() { return ip; } public void setIp(String ip) { this.ip = ip; } public String getPath() { return path; } public void setPath(String path) { this.path = path; } }
3. 清理重复注解
两种方式选一种即可:
- 保留
ApplicationServer类上的@Component,删除启动类上的@EnableConfigurationProperties(ApplicationServer.class) - 删除
ApplicationServer类上的@Component,保留启动类上的@EnableConfigurationProperties(ApplicationServer.class)
修改完成后重启应用,就能正常读取并打印服务器列表配置,不会再出现类型转换报错。
内容的提问来源于stack exchange,提问作者ghostrider
相关产品推荐
相关产品推荐

