1. 程式人生 > 實用技巧 >java 實體類Bean與Map互相轉化

java 實體類Bean與Map互相轉化

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

寫在最後

  哪位大佬如若發現文章存在紕漏之處或需要補充更多內容,歡迎留言!!!

相關推薦: