• javaBean与Map<String,Object>互转


    背景:有时候想不通阿帕奇的BeanUtils是怎么进行map和Bean互相转化的。

    工作闲暇之余,自己写个一小段代码,一探究竟,试试才发现,原来一切并非我们想的那么什么和复杂。

    注:这里只是简单实例,不追求严密的代码规范和异常处理。

    首先,新建一个工具类BeanUtils.java.

    辅助实体类Person.java,如下:

    public class Person {
        private String name;
        private int age;
        private boolean adult;
        
        
        public Person(String name, int age, boolean isAdult) {
            this.name = name;
            this.age = age;
            this.adult = isAdult;
        }
        
        @Override
        public String toString() {
            return "Person [name=" + name + ", age=" + age + ", adult=" + adult + "]";
        }
        public Person() {
        }
        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;
        }
    
        public boolean isAdult() {
            return adult;
        }
    
        public void setAdult(boolean adult) {
            this.adult = adult;
        }
        
    }

    1.JavaBean 转换为Map<String,Object>;

    //bean 转化为map
        public static Map<String,Object> tranferBean2Map(Object obj) throws  Exception{
            //obj为空,结束方法
            if(obj==null)
                return null;
            Map<String, Object> map=new HashMap<String, Object>();
            /*Introspector 类为通过工具学习有关受目标 Java Bean 支持的属性、事件和方法的知识提供了一个标准方法。
             * java的自省机制
             * */
            BeanInfo beanInfo = Introspector.getBeanInfo(obj.getClass());
            PropertyDescriptor[] ps = beanInfo.getPropertyDescriptors();
            for (PropertyDescriptor propertyDescriptor : ps) {
                String key = propertyDescriptor.getName();
                
                if(!"class".equals(key)){
                    Method getter = propertyDescriptor.getReadMethod();
                    Object value = getter.invoke(obj);
                    map.put(key, value);
                }
            }
            return map;
            
        }

    2.Map<String,Object>转换为JavaBean ,使用简单的泛型;

    //map转换为javaBean
        public static <T extends Object>  T transferMap2Bean(Map<String,Object> map,Class<T> clazz) throws Exception{
            T instance = clazz.newInstance();
            BeanInfo beanInfo = Introspector.getBeanInfo(clazz);
            PropertyDescriptor[] descriptors = beanInfo.getPropertyDescriptors();
            for (PropertyDescriptor property : descriptors) {
                String key=property.getName();
                if(map.containsKey(key)){
                    Object value = map.get(key);
                    Method setter = property.getWriteMethod();
                    setter.invoke(instance, value);
                }
                
            }
            
            return instance;
        }
        

    经过测试,可以成功进行map和javabean的互转。

    Introspector 类为通过工具学习有关受目标 Java Bean 支持的属性、事件和方法的知识提供了一个标准方法。

  • 相关阅读:
    如何撤销Git操作?
    SpringBoot Controller接收参数的几种方式盘点
    全面解析Spring中@ModelAttribute注解的用法
    Java中将字符串转为驼峰格式
    如何将Map键值的下划线转为驼峰
    JS如何获取地址栏url后面的参数?
    解决wordpress 5.3更新后Uncaught Typeerror: $ is not a function
    小程序如何判断用户(后台使用Django)
    服务器 Web服务器 应用服务器区别联系
    C语言和Python语言在存储变量方面的不同
  • 原文地址:https://www.cnblogs.com/sloveling/p/map2bean.html
Copyright © 2020-2023  润新知