开发中有一步要发送 http 请求,参数为 map ,原本是有一个 bean 的, 于是就需要转换一下,
spring springframework 里有 BeanUtils,包含一个广为人知的 copyProperties 方法,于是点开这个类看了并没有转为map的,
虽然写一个转换方法也不算困难,不过由于时间关系,如果有现成的就直接导包用嘛,
然后搜索了一下,发现 org.apache.commons.beanutils.BeanUtils 有一个 populate(bean, map),的方法,就拿过来用了,
后来测试时候发现map是空的,就很懵逼,然后看了一下方法描述
@param properties Map keyed by property name, with the corresponding (String or String[]) value(s) to be set
就是说先要把 bean 的属性设为 map 的 key 才行,有 key 才会有值,而 new 的 map 当然是空的,结果还是空的。(⊙﹏⊙) 想不通开发者这么做的用意。
无奈正打算重写之际,发现它的第一个方法(因为是d开头)describe 参数为 bean ,return map,跑了一下测试打印出来是这样子的
{ CSNF=null, CDBH=ererger, class=class com.dto.PeopleData}
多一个 class 属性,然后 map.remove(”class”) ,就得到了想要的结果
{ CSNF=null, CDBH=ererger}
下面是得空补上的手动实现方法
怎么把beanutils 包导入?
将beanutils的jar包加入到libs文件夹中,然后右键选择Add As library进行编译,编译之后即添加成功,课直接使用,添加步骤如下:
1、把beanutils的jar包,复制到app–>libs文件夹下(不能展开的就是不能使用,表示没有添加成功),如下图:
2、在jar包下右键鼠标,选择Add as Library,如下图:
3、等待系统编译完成,jar包可以展开表示jar包已经添加成功,如下图:
看到你的截图了, org.apache.commons.beanutils.PropertyUtilsBean.getMappedProperty这个方法, 需要使用 一个名叫 org.apache.commons.collections.FastHashMap 的类
这个类是 commons-collections jar里面的
我看了下 commons-beanutils 的依赖关系
也就是说 你还需要 导入 commons-logging 以及 commons-collections 这两个包
以上就是关于BeanUtils 踩坑知识全部的内容,如果了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!