Spring Boot @ConfigurationProperties属性绑定Getter命名问题求助
问题解析:@ConfigurationProperties绑定中Getter命名影响注入的原因
核心逻辑是Spring Boot的配置绑定严格遵循JavaBean规范,属性名由Getter/Setter的命名推导,而非字段本身的名称。
两种情况的具体分析
Getter为
getDescription()时能正常注入
按照JavaBean的属性推导规则:去掉get前缀,将剩余部分的首字母小写,得到属性名description。
Spring会把配置文件中sample.description这个key,和推导出来的description属性做匹配,同时寻找对应的Setter方法(setDescription())。只要你的类中存在这个Setter(不管字段实际叫descrip_tion还是其他),就能完成值的注入,所以descrip_tion字段能拿到配置值。Getter改为
getDescrip_tion()时出现绑定错误
此时JavaBean规则推导的属性名变成了descrip_tion。
Spring会尝试匹配配置中对应的sample.descrip_tion,但你的配置是sample.description,两者不匹配。更关键的是,Spring会寻找对应descrip_tion属性的Setter方法(setDescrip_tion()),如果你的类里没有这个Setter(原来的Setter可能还是setDescription()),就会抛出“找不到setter”的绑定错误。
额外补充与解决方案
- Spring Boot支持配置key的下划线/短横线与JavaBean驼峰属性的自动转换:比如配置
sample.descrip_tion会自动映射到JavaBean的descripTion属性(对应GettergetDescripTion()、SettersetDescripTion()),建议遵循这种规范命名,避免字段名带下划线。 - 如果非要保留带下划线的字段名,可以在字段上添加
@JsonProperty("description")注解,显式指定绑定的配置key,这样不管Getter/Setter的命名是什么,都会绑定sample.description。
内容的提问来源于stack exchange,提问作者Chris
相关产品推荐
相关产品推荐

