最近,研究map与java对象之间的相互转换,总结了5种方法:

第一种:使用org.apache.commons.beanutils转换

用到的主要jar包:commons-beanutils-1.9.3.jar

//map转java对象
public static Object mapToObject(Map<String, Object> map, Class<?> beanClass)throws Exception {if (map == null) {return null;}Object obj = beanClass.newInstance();BeanUtils.populate(obj, map);return obj;}//java对象转map
public static Map<?, ?> objectToMap(Object obj) {if (obj == null)return null;return new BeanMap(obj);}

在使用该方法进行java对象转map时,可能会发生以下错误:

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/collections/Transformerat java.lang.ClassLoader.defineClass1(Native Method)at java.lang.ClassLoader.defineClass(ClassLoader.java:621)at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:124)at java.net.URLClassLoader.defineClass(URLClassLoader.java:260)at java.net.URLClassLoader.access$000(URLClassLoader.java:56)at java.net.URLClassLoader$1.run(URLClassLoader.java:195)at java.security.AccessController.doPrivileged(Native Method)at java.net.URLClassLoader.findClass(URLClassLoader.java:188)at java.lang.ClassLoader.loadClass(ClassLoader.java:307)at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)at java.lang.ClassLoader.loadClass(ClassLoader.java:252)at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)at org.apache.commons.beanutils.BeanMap.createTypeTransformers(BeanMap.java:132)at org.apache.commons.beanutils.BeanMap.<clinit>(BeanMap.java:68)at com.example2.pojo.PojoToMap.objectToMap(PojoToMap.java:23)at com.example2.pojo.PojoToMap.main(PojoToMap.java:16)
Caused by: java.lang.ClassNotFoundException: org.apache.commons.collections.Transformerat java.net.URLClassLoader$1.run(URLClassLoader.java:200)at java.security.AccessController.doPrivileged(Native Method)at java.net.URLClassLoader.findClass(URLClassLoader.java:188)at java.lang.ClassLoader.loadClass(ClassLoader.java:307)at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)at java.lang.ClassLoader.loadClass(ClassLoader.java:252)at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)... 16 more

解决方法见本人的另一篇文章: https://blog.csdn.net/liuyunyihao/article/details/86596595

第二种:使用Introspector转换

//map转java对象
public static Object mapToObject(Map<String, Object> map, Class<?> beanClass) throws Exception {if (map == null)return null;Object obj = beanClass.newInstance();BeanInfo beanInfo = Introspector.getBeanInfo(obj.getClass());PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors();for (PropertyDescriptor property : propertyDescriptors) {Method setter = property.getWriteMethod();if (setter != null) {setter.invoke(obj, map.get(property.getName()));}}return obj;}//java对象转map
public static Map<String, Object> objectToMap(Object obj) throws Exception {if (obj == null) {return null;}Map<String, Object> map = new HashMap<String, Object>();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);}return map;
}

第三种:使用reflect转换

//map转java对象
public static Object mapToObject(Map<String, Object> map, Class<?> beanClass) throws Exception {if (map == null) {return null;}Object object = beanClass.newInstance();Field[] fields = beanClass.getDeclaredFields();for (Field field : fields) {int mod = field.getModifiers();if (Modifier.isFinal(mod) || Modifier.isStatic(mod)) {continue;}field.setAccessible(true);field.set(object, map.get(field.getName()));}return object;}//java对象转map
public static Map<String, Object> objectToMap(Object obj) throws Exception {if (obj == null) {return null;}Map<String, Object> map = new HashMap<String, Object>();Field[] declaredFields = obj.getClass().getDeclaredFields();for (Field field : declaredFields) {field.setAccessible(true);map.put(field.getName(), field.get(obj));}return map;
}

第四种:使用net.sf.cglib.beans.BeanMap转换

用到的主要jar包:cglib-2.2.2.jar

//map转java对象
public static Object mapToObject(Map<String, Object> map, Class<?> beanClass) throws Exception {Object object = beanClass.newInstance();BeanMap beanMap = BeanMap.create(object);beanMap.putAll(map);return object;
}//java对象转map
public static Map<String, Object> objectToMap(Object obj) {Map<String, Object> map = Maps.newHashMap();if (obj != null) {BeanMap beanMap = BeanMap.create(obj);for (Object key : beanMap.keySet()) {map.put(key + "", beanMap.get(key));}}return map;
}

在使用本方法进行map转java对象时,可能会发生以下错误:

Exception in thread "main" java.lang.NoClassDefFoundError: org/objectweb/asm/Typeat net.sf.cglib.core.TypeUtils.parseType(TypeUtils.java:184)at net.sf.cglib.core.KeyFactory.<clinit>(KeyFactory.java:66)at net.sf.cglib.beans.BeanMap$Generator.<clinit>(BeanMap.java:64)at net.sf.cglib.beans.BeanMap.create(BeanMap.java:56)at com.example2.pojo.MapToPojo.mapToBean(MapToPojo.java:27)at com.example2.pojo.MapToPojo.main(MapToPojo.java:18)
Caused by: java.lang.ClassNotFoundException: org.objectweb.asm.Typeat java.net.URLClassLoader$1.run(URLClassLoader.java:200)at java.security.AccessController.doPrivileged(Native Method)at java.net.URLClassLoader.findClass(URLClassLoader.java:188)at java.lang.ClassLoader.loadClass(ClassLoader.java:307)at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)at java.lang.ClassLoader.loadClass(ClassLoader.java:252)at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)... 6 more

解决方法见本人的另一篇文章:https://blog.csdn.net/liuyunyihao/article/details/86593722

第五种:使用json转换

用到的主要jar包:fastjson-1.2.54.jar

//map转java对象
public static Object mapToObject(Map<String, Object> map, Class<?> beanClass) throws Exception {String jsonStr = JSONObject.toJSONString(map);return JSONObject.parseObject(jsonStr, beanClass);
}//java对象转map
public static Map<String, Object> objectToMap(Object obj) {String jsonStr = JSONObject.toJSONString(obj);return JSONObject.parseObject(jsonStr);
}

以上方法本人均实际测试通过。

map与java对象相互转换相关推荐

  1. [转]jackson json字符串、map、java对象的转换例子

    ackson框架 json字符串.map.java对象的转换例子 先下载框架jar包: 下面是一些例子: package jackson; import java.io.File; import ja ...

  2. Java工具类--Map集合与Java对象相互转换

    import org.springframework.cglib.beans.BeanMap;import java.util.HashMap; import java.util.Map;public ...

  3. Java对象,Map,List,Set数组等相互转换大全(详细讲解,附代码,讲解案例)

    Java对象,Map,List,Set数组等相互转换大全(详细讲解,附代码,讲解案例) Java对象 转 JSON字符串 JAVA对象转MAP Map转java对象 List转map List和Map ...

  4. java vo转map_Java对象与map对象相互转换

    Java对象与map对象相互转换/** * 使用org.apache.commons.beanutils进行转换 */ class A { public static Object mapToObje ...

  5. Java对象、List集合、Map和JSON格式数据的互转(谷歌的gson-2.2.4.jar包)

    1. 导入JSON的jar包 博主使用的是谷歌开发的gson.2.2.4.jar包,如果需要jar包可评论.导包过程不熟悉的可参考jar包导入教程.导入之后即可使用,如下图. 2. Java对象和JS ...

  6. Gson案例:Java对象与JSON字符串相互转换

    Gson案例:Java对象与JSON字符串相互转换 一.Gson概述 Gson是一个Java类库,可将Java对象转换为相应的JSON形式,也可以将JSON字符串转换为对应的Java对象.Gson是一 ...

  7. java map转JSON对象

    java map转JSON对象 net.sf.json.JSONObject.fromObject(map)

  8. java之Map对象转java对象的两种简单方式

    我们在处理数据的时候,经常用到map对象转java对象,下面我们用代码演示下,希望能够帮助到有这方面需求的老哥. 要转换的java对象: public class Person {private In ...

  9. string转map java_string 转 java对象、转map的方式

    1.使用fastJson 将String转 map: String out; Object succesResponse = JSON.parse(out);    //先转换成Object Map ...

最新文章

  1. 设置显示Git的修改历史History快捷键Alt+H,方便多人开发的时候快速查看谁修改了代码
  2. leetcode-24 两两交换链表中的节点
  3. 【Python-ML】SKlearn库Pipeline工作流和K折交叉验证
  4. 一文说通异步 LINQ
  5. Spark实战之读写HBase
  6. 令人迷惑的硬币翻转(洛谷P1146题题解,Java语言描述)
  7. 29岁年薪百万,晋升阿里最年轻P8之一,我想分享8点成长经验
  8. Intel® Nehalem/Westmere架构/微架构/流水线 (1) - 特性概述
  9. 吴恩达深度学习之一《神经网络和深度学习》学习笔记
  10. 5 simple types and 6 false values in JavaScript
  11. Java 算法刷题指南
  12. colab配合谷歌云盘使用
  13. 解决AndroidStudio Locat侧边栏消失
  14. 华为账号不能连接服务器怎么回事,云服务器连接不了是什么原因_云服务器连不上是为什么_华为云...
  15. (31)Java基础语法 --接口
  16. 学堂在线《工程伦理》第八章课后习题及答案(仅供参考)
  17. 东方通TongWeb部署
  18. Windows CMD 检擦电脑是否被入侵[简单办法]
  19. MATLAB|用循环描点画波形图
  20. Fedora linux root登录和ssh连接

热门文章

  1. 前端叹了口气,并表示谣言止于智者
  2. 两家纳斯达克上市“区块链”公司遭遇法律问题
  3. el-table 设置表头居中 ,表格内容某一列单独居中或左对齐或者右对齐
  4. 一样的歌 不一样的感觉
  5. win 10配置Tomcat 8.5环境变量
  6. 机智过人人声机器人_机智过人20171215视频,矣晓沅,九歌作诗机器人,清华大学
  7. Erlang快速入门(一)
  8. 上海著名综合性商厦一览 (1)
  9. 配置阿里云的CDN加速
  10. 深度分析射频电路的原理及应用