1.情景展示
java对象与Map之间进行相互转换,如何实现?
2.分析
通过org.apache.commons.beanutils.BeanUtils类来实现
所需jar包
<dependency>
<groupId>commons-beanutils</groupId>
<artifactId>commons-beanutils</artifactId>
<version>1.8.0</version>
<scope>compile</scope>
</dependency>
3.代码实现
Java对象转Map
/*
* Java对象转Map
* @attention: 实体类的属性必须有对应的get()方法
* @date: 2020年11月20日 0020 10:43
* @param: bean Java对象
* @return: java.util.Map<java.lang.String,java.lang.Object>
*/
public static Map<String, Object> fromJavaBean(Object bean) {
if (null == bean) return null;
try {
Map<String, Object> map = BeanUtils.describe(bean);
// 移除key=class
map.remove("class");
log.debug("JavaBean-->Map转换前:" + bean.toString());
log.debug("JavaBean-->Map转换后:" + map);
return map;
} catch (Exception e) {
log.error("JavaBean-->Map转换失败:" + e.getMessage());
e.printStackTrace();
return null;
}
}
说明: 首字母大写有可能会存在被强转成小写的可能,比如:X509->x509
Map转Java对象
/*
* Map转java对象
* @attention: 实体类不能使用lombok注解@Accessors(chain = true),否则将会赋值失败
* 实体类的属性必须有对应的set()方法
* @date: 2020年11月20日 0020 10:53
* @param: clazz java类
* @param: map 待转换
* @return: T
*/
public static <T> T toJavaBean(Class<?> clazz, Map map) {
try {
T newBeanInstance = (T) clazz.newInstance();
BeanUtils.populate(newBeanInstance, map);
log.debug("Map-->JavaBean转换前:" + map);
log.debug("Map-->JavaBean转换后:" + newBeanInstance.toString());
return newBeanInstance;
} catch (Exception e) {
log.error("Map-->JavaBean转换失败:" + e.getMessage());
e.printStackTrace();
return null;
}
}
4.测试
public static void main(String[] args) {
Map<String, Object> hashMap = new HashMap<>(5);
hashMap.put("name", "Marydon");
hashMap.put("sex", "男");
hashMap.put("age", 18);
hashMap.put("address", "深圳");
hashMap.put("company", "创业");
// map转实体类
People people = MapUtils.toJavaBean(People.class,hashMap);
// 实体类转map
Map map = MapUtils.fromJavaBean(people);
// 打印执行结果
System.out.println(people.toString());
System.out.println(map);
}
写在最后
哪位大佬如若发现文章存在纰漏之处或需要补充更多内容,欢迎留言!!!
作者:Marydon