Spring Boot 2.7.4中@ConfigurationProperties嵌套属性注入为null问题求助
Spring Boot 2.7.4嵌套@ConfigurationProperties属性为null的解决办法
Spring Boot完全支持嵌套属性注入,你遇到的child为null的问题并非框架不支持该场景,而是代码细节存在疏漏,以下是排查和解决方法:
可能的问题点及修复方案
1. 确保Person类存在无参构造函数
Spring实例化嵌套配置对象时,默认需要调用无参构造函数。如果你的Person类仅定义了带参构造,Spring无法创建child实例,导致属性为null。添加无参构造即可:
public class Person { private String name; private int age; private Person child; // 添加无参构造 public Person() {} // 字段对应的getter、setter public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public Person getChild() { return child; } public void setChild(Person child) { this.child = child; } }
2. 检查child字段的setter方法正确性
确认setChild方法是public访问权限,参数类型为Person,方法名严格遵循JavaBean规范(setChild)。错误的方法签名或访问权限会导致Spring无法填充该属性。
3. @NestedConfigurationProperty可省略
该注解仅用于给IDE提供配置元数据提示(比如让IDE识别嵌套配置的补全),不影响Spring实际的属性注入逻辑,有无该注解都不会导致child为null。
验证修改
调整代码后,Spring Boot就能正确解析YAML中的child节点,将对应值填充到Person对象的child属性中。
内容的提问来源于stack exchange,提问作者Gourav
相关产品推荐
相关产品推荐

