项目场景:
使用java.bean.PropertyDescriptor相关的java.bean获取bean的属性
将map转换为bean
使用Spring BeanMap 获取bean信息
问题描述
当java bean中存在“aProp”类型的属性是,PropertyDescriptor获取的属性名称为“AProp”
@Data
public class Test {
private String aProp;
}
public static void main(String[] args) {
BeanInfo beanInfo = Introspector.getBeanInfo(Test.class);
Arrays.stream(beanInfo.getPropertyDescriptors()).forEach(System.out::println);
}
输出结果为
java.beans.PropertyDescriptor[name=AProp;
propertyType=class java.lang.String;
readMethod=public java.lang.String com.sinfusi.cls.convert.Test.getAProp();
writeMethod=public void com.sinfusi.cls.convert.Test.setAProp(java.lang.String)]
原因分析:
当bean里有 aProp 时,BeanMap底层使用的 java.beans.Introspector,
会将属性名称映射为 AProp ,猜测应该是 和方法名getAProp
有关 ,这样拆解出来的属性名有问题
see: java.beans.Introspector:512
pd = new PropertyDescriptor(this.beanClass, name.substring(3), method, null);
PropertyDescriptor:159
setName(Introspector.decapitalize(base));
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/3f24e9c0e20f349f64f505d7984d98ed.png)
在转换首字母时,如果出现两个连续的大写字符是不会转换的,会直接返回原名称。
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/15f70d589d19f2cfcf8c93d52b98e058.png)
结束
到此结束