文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Java中如何优雅的把Map转为对象

2023-08-31 07:20

关注

在项目开发中,经常碰到map转实体对象或者对象转map的场景,工作中,很多时候我们可能比较喜欢使用第三方jar包的API对他们进行转化,而且用起来也还算方便,比如像fastJson就可以轻松实现map和对象的互转,但这里,我想通过反射的方式对他们做转化,也算是对反射的学习和研究吧;

map转java对象

import com.alibaba.fastjson.JSON;import com.alibaba.fastjson.JSONObject;import com.mes.common.core.utils.StringUtils;import java.beans.BeanInfo;import java.beans.IntrospectionException;import java.beans.Introspector;import java.beans.PropertyDescriptor;import java.lang.reflect.Method;import java.util.HashMap;import java.util.Iterator;import java.util.Map;import java.util.logging.Level;import java.util.logging.Logger;
    public static Object convertToObject(Class clazz, Map map) throws            IntrospectionException, InstantiationException, IllegalAccessException {        BeanInfo bi = Introspector.getBeanInfo(clazz);        Object obj = clazz.newInstance();        PropertyDescriptor[] pds = bi.getPropertyDescriptors();        String pName;        for (PropertyDescriptor pd : pds) {            pName = pd.getName();            if (map.containsKey(pName)) {                try {                    if (pd.getPropertyType().getName().equals("java.lang.Long")) {                        if(StringUtils.isNotEmpty(map.get(pName).toString())){pd.getWriteMethod().invoke(obj, Long.parseLong(map.get(pName).toString()));                        }//                        else{//pd.getWriteMethod().invoke(obj, map.get(pName));//                        }                    } else {                        pd.getWriteMethod().invoke(obj, map.get(pName));                    }                } catch (Exception ex) {                    Logger.getLogger(MapUtil.class.getName()).log(Level.SEVERE, null, ex);                }            }        }        return obj;    }

java对象转map

    public static Map objectToMap(Object obj) {        if (obj == null) {            return null;        }        Map map = new HashMap();        try {            BeanInfo beanInfo = Introspector.getBeanInfo(obj.getClass());            PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors();            for (PropertyDescriptor property : propertyDescriptors) {                String key = property.getName();                if (key.compareToIgnoreCase("class") == 0) {                    continue;                }                Method getter = property.getReadMethod();                Object value = getter != null ? getter.invoke(obj) : null;                String v = null;                if (value != null) {                    v = value.toString();                }                map.put(key, v);            }        } catch (Exception e) {            e.printStackTrace();        }        return map;    }        public static Map objectToMapObj(Object obj) {        if (obj == null) {            return null;        }        Map map = new HashMap();        try {            BeanInfo beanInfo = Introspector.getBeanInfo(obj.getClass());            PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors();            for (PropertyDescriptor property : propertyDescriptors) {                String key = property.getName();                if (key.compareToIgnoreCase("class") == 0) {                    continue;                }                Method getter = property.getReadMethod();                Object value = getter != null ? getter.invoke(obj) : null;                map.put(key, value);            }        } catch (Exception e) {            e.printStackTrace();        }        return map;    }

Map转换为Json字符串

     public static String mapToJsonString(Map map) {        JSONObject json = new JSONObject();        Iterator> entries = map.entrySet().iterator();        while (entries.hasNext()) {            Map.Entry entry = entries.next();            json.put(entry.getKey(), entry.getValue());        }        return json.toString();    }

Json字符串转换为Map

    public static Map jsonStringToMap(String str) {        Map map = (Map) JSON.parse(str);        return map;    }

来源地址:https://blog.csdn.net/askuld/article/details/130246829

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯