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

  说明: 首字母大写有可能会存在被强转成小写的可能,比如: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);
}

 

写在最后

  哪位大佬如若发现文章存在纰漏之处或需要补充更多内容,欢迎留言!!!

 相关推荐:

原文地址:https://www.cnblogs.com/Marydon20170307/p/14010077.html