zoukankan      html  css  js  c++  java
  • 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);
    }
    

     

    写在最后

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

     相关推荐:

  • 相关阅读:
    二、Cocos2dx概念介绍(游戏开发中不同的坐标系,cocos2dx锚点)
    (2)入门指南——(7)添加jquery代码(Adding our jQuery code)
    Citrix 服务器虚拟化之三十一 XenApp 6.5负载均衡
    CSS——inline-block属性
    VMware Workstation(虚拟机软件) V10.0 简体中文版可以安装了
    [.NET MVC4 入门系列01]Helloworld MVC 4 第一个MVC4程序
    ElasticSearch NEST笔记
    什么是REST API?
    ArrayList与List<T>笔记
    C# Socket SSL通讯笔记
  • 原文地址:https://www.cnblogs.com/Marydon20170307/p/14010077.html
Copyright © 2011-2022 走看看