引入
在开发的时候会遇到这种场景,把一个java对象转换成一个Map,转换的方法有很多比如下面:
1、通过ObjectMapper先将bean转换为json,再将json转换为map,但是这种方法比较绕,且效率很低,经测试,循环转换10000个bean,就需要12秒!!!不推荐使用
2、通过java反射,获取bean类的属性和值,再转换到map对应的键值对中,这种方法次之,但稍微有点麻烦
3、通过Spring框架中的BeanMap类中的方法,比较方便。(本文介绍)
代码案例
有时候比如我们通过HttpClient调用,把异常的返回值打印到Cat上,需要添加的是Map,一下是封装的工具类:
import org.springframework.cglib.beans.BeanMap;
import java.util.HashMap;
import java.util.Map;
public class BeanMapUtils {
/**
* 将对象属性转化为map结合
*/
public static <T> Map<String, Object> beanToMap(T bean) {
Map<String, Object> map = new HashMap<>();
if (bean != null) {
BeanMap beanMap = BeanMap.create(bean);
for (Object key : beanMap.keySet()) {
map.put(key+"", beanMap.get(key));
}
}
return map;
}
/**
* 将map集合中的数据转化为指定对象的同名属性中
*/
public static <T> T mapToBean(Map<String, Object> map,Class<T> clazz) throws Exception {
T bean = clazz.newInstance();
BeanMap beanMap = BeanMap.create(bean);
beanMap.putAll(map);
return bean;
}
}
注意事项
org.springframework.cglib.beans.BeanMap直接转换出来的Map对象,做不了put操作。也就是上面BeanMap beanMap = BeanMap.create(bean);
这里的beanMap对象是没办法调用put方法,即使调用了也不会真正put进去值。