zoukankan      html  css  js  c++  java
  • Java实体类Bean与Map互相转化(两种方式)

    前言:

    实体类和map相互转换,实体类需要有无参构造,不然会出现异常。

    一:BeanUtils类来实现

    pom:

    <dependency>
         <groupId>commons-beanutils</groupId>
         <artifactId>commons-beanutils</artifactId>
         <version>1.8.0</version>
         <scope>compile</scope>
    </dependency>
    
    <dependency>
         <groupId>commons-logging</groupId>
         <artifactId>commons-logging</artifactId>
         <version>1.2</version>
    </dependency>

     代码:

    package com.x;
    
    import java.util.HashMap;
    import java.util.Map;
    
    import org.apache.commons.beanutils.BeanUtils;
    
    public class BeanTest {
        public static Map<String, Object> beanToMap(Object bean) {
            if (null == bean)
                return null;
            try {
                Map<String, Object> map = BeanUtils.describe(bean);
                // 移除key=class
                map.remove("class");
    
                System.out.println("JavaBean-->Map转换前:" + bean.toString());
                System.out.println("JavaBean-->Map转换后:" + map);
                return map;
            } catch (Exception e) {
                System.out.println("JavaBean-->Map转换失败:" + e.getMessage());
                e.printStackTrace();
                return null;
            }
        }
    
        public static <T> T mapToBean(Class<?> clazz, Map map) {
            try {
                T newBeanInstance = (T) clazz.newInstance();
                BeanUtils.populate(newBeanInstance, map);
                System.out.println("Map-->JavaBean转换前:" + map);
                System.out.println("Map-->JavaBean转换后:" + newBeanInstance.toString());
                return newBeanInstance;
            } catch (Exception e) {
                System.out.println("Map-->JavaBean转换失败:" + e.getMessage());
                e.printStackTrace();
                return null;
            }
        }
    
        public static void main(String[] args) {
            Map<String, Object> hashMap = new HashMap<>();
            hashMap.put("name", "谢辉");
            hashMap.put("age", 18);
            // map转实体类
            Xieh people = mapToBean(Xieh.class, hashMap);
    
            // 实体类转map
            Map map = beanToMap(people);
    
            // 打印执行结果
            System.out.println(people.toString());
            System.out.println(map);
        }
    }

    二:jdk自带方法

    代码:

    package com.x2;
    
    import java.beans.BeanInfo;
    import java.beans.Introspector;
    import java.beans.PropertyDescriptor;
    import java.lang.reflect.Method;
    import java.util.HashMap;
    import java.util.Map;
    
    public class BeanTest {
    
        public static Map<String, Object> bean2Map(Object obj) {
            if (obj == null) {
                return null;
            }
            Map<String, Object> map = new HashMap<String, Object>();
            try {
                BeanInfo beanInfo = Introspector.getBeanInfo(obj.getClass());
                PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors();
                for (PropertyDescriptor property : propertyDescriptors) {
                    String key = property.getName();
                    // 过滤class属性
                    if (!key.equals("class")) {
                        // 得到property对应的getter方法
                        Method getter = property.getReadMethod();
                        Object value = getter.invoke(obj);
                        map.put(key, value);
                    }
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
            return map;
        }
    
        public static Object mapToBean(Class type, Map map) {
            Object obj = null;
            try {
                BeanInfo beanInfo = Introspector.getBeanInfo(type);
                obj = type.newInstance();
                PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors();
                for (PropertyDescriptor descriptor : propertyDescriptors) {
                    String propertyName = descriptor.getName();
                    if (map.containsKey(propertyName)) {
                        Object value = map.get(propertyName);
                        descriptor.getWriteMethod().invoke(obj, value);
                    }
                }
            } catch (Exception e) {
                System.out.println("map转实体类出现异常");
            }
            return obj;
        }
    
        public static void main(String[] args) {
            Xieh xieh = new Xieh();
            xieh.setName("谢辉");
            xieh.setAge(23);
    
            Map<String, Object> map = bean2Map(xieh);
            System.out.println(map.toString());
            Xieh object = (Xieh) mapToBean(Xieh.class, map);
            System.out.println(object.toString());
        }
    }

    测试实体类

    package com.x2;
    
    import java.io.Serializable;
    
    public class Xieh implements Serializable {
        private String name;
        private int age;
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public int getAge() {
            return age;
        }
    
        public void setAge(int age) {
            this.age = age;
        }
    
        @Override
        public String toString() {
            return "Xieh [name=" + name + ", age=" + age + "]";
        }
    
    }
  • 相关阅读:
    前端之页面标签的图标修改
    分页, 解析器, 渲染器
    DRF的认证,频率,权限
    视图组件,路由组件,版本控制
    序列化组件
    Restful规范
    docker大全集
    哨兵和docker容器
    项目发布须知
    Linux之nginx
  • 原文地址:https://www.cnblogs.com/xiejn/p/14116915.html
Copyright © 2011-2022 走看看