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);
}
