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