项目场景:

使用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));


在转换首字母时,如果出现两个连续的大写字符是不会转换的,会直接返回原名称。

结束

到此结束

PropertyDescriptor 获取属性名称“aProp“ 为“AProp“问题分析相关推荐

  1. Java利用PropertyDescriptor获取属性的 getter/setter 方法

    PropertyDescriptor类: PropertyDescriptor类表示JavaBean类通过存储器导出一个属性.主要方法:     1. getReadMethod(),获得用于读取属性 ...

  2. java 获取对象属性值为空或者非空的属性名称

    目录 1. 获取对象属性值为空的属性名称 2. 复制对象非空属性值 1. 获取对象属性值为空的属性名称 /** * @Title: getNullPropertyNames* @Description ...

  3. 【Groovy】自定义 Xml 生成器 BuilderSupport ( 继承 BuilderSupport 抽象类 | 在 createNode 方法中获取节点名称、节点属性、节点值信息 )

    文章目录 一.继承 BuilderSupport 抽象类 二.在 createNode 方法中获取节点名称.节点属性.节点值信息 三.完整代码示例 1.MyBuilderSupport 生成器代码 2 ...

  4. 【java】java获取对象属性类型、属性名称、属性值

    java获取对象属性类型.属性名称.属性值 获取属性 修饰符:[在Field[]循环中使用] String modifier = Modifier.toString(fields[i].getModi ...

  5. kotlin获取属性_Kotlin程序获取系统名称

    kotlin获取属性 The task is to get the system name. 任务是获取系统名称. package com.includehelp import java.net.In ...

  6. JavaScript函数之实际参数对象(arguments) / callee属性 / caller属性 / 递归调用 / 获取函数名称的方法...

    函数的作用域:调用对象 JavaScript中函数的主体是在局部作用域中执行的,该作用域不同于全局作用域.这个新的作用域是通过将调用对象添加到作用域链的头部而创建的(没怎么理解这句话,有理解的亲可以留 ...

  7. 获取Java对象中所有的属性名称和属性值

    private static Logger logger= LoggerFactory.getLogger(ObjectFieldUtil.class);/*** 将旧对象的属性值与新对象的属性值做比 ...

  8. 14 bs对象.节点名称.name attrs string 获取节点名称 属性 内容

    14 bs对象.节点名称.name attrs string 获取节点名称 属性 内容 14.1 提取节点名称 属性 内容的方法 tag [tæɡ]:标签. attr:属性. string [strɪ ...

  9. java通过反射获取类名、属性名称以及@Table注解上的表名称

    /*** 通过获取类上的@Table注解获取表名称** @param clazz* @return*/public static Map<String, String> getTableN ...

最新文章

  1. python3 lambda表达式
  2. 一个简单文本处理问题的多种解法
  3. 【java项目实践】具体解释Ajax工作原理以及实现异步验证username是否存在+源代码下载(java版)...
  4. 基于Elasticsearch的数据报表方案
  5. LeetCode 637 二叉树的层平均值-简单
  6. html怎么拿json数据,如何使用Python从HTML数据中提取JSON数据?
  7. mac --snip 滚动截屏
  8. 无刷舵机和普通舵机,数字舵机还有模拟舵机的区别
  9. 电脑ps计算机磨皮,ps脸部磨皮教程
  10. XIO: fatal IO error 25 (Inappropriate ioctl for device) on X server “localhost:11.0“
  11. 项目管理知识体系指南(十)项目风险管理
  12. dot全称_dot是什么格式的文件?dot文件如何打开?
  13. 安装virtualbox可能遇到的错误
  14. Unity引擎与Cocos引擎的区别
  15. 计算机检测不到蓝牙,图解Win10 1809系统中检测不到蓝牙设备的方法
  16. 格式化的盘要如何恢复文件
  17. 荣耀智慧屏评测 鸿蒙OS加持,荣耀智慧屏评测:鸿蒙OS加持 面向未来的超智能电视...
  18. 如何是实现微信会员开卡组件中一个手机号绑定一个微信号(思路篇)
  19. webview 清除缓存的方式
  20. 3D视频轮播插件——web前端

热门文章

  1. 达人评测 小米ea552022款怎么样
  2. MAC 无法通过数据线连接到手机
  3. git 合并 fast-forward
  4. python sdk 获取新浪微博签到信息
  5. 获取 EXIF 信息中的位置信息和拍摄时间。
  6. Eigen入门系列 —— Eigen::Matrix矩阵点乘、叉乘、转置、求逆、求和、行列式、迹、数乘
  7. echarts 饼图引导线尾部画圆入坑
  8. 计算机系给未来的自己写信,给未来的自己所写的一封信
  9. LL1_SLR1_LR1语法分析C++实现
  10. 诺基亚7P可刷华为鸿蒙系统,华为鸿蒙OS正式发布 可适用多种设备/更加安全高效...