java 實體類Bean與Map互相轉化
阿新 • • 發佈:2020-11-20
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; } }
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); }
寫在最後
哪位大佬如若發現文章存在紕漏之處或需要補充更多內容,歡迎留言!!!