首页 > 编程知识 正文

java map转对象 工具类,将map转为对象

时间:2023-05-04 04:47:22 阅读:179653 作者:918

ladbm研究了map和java对象之间的相互变换,总结了五种方法:

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

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

//mapJava对象公共静态对象映射对象(mapstring,objectmap,Class? beanclass(throwsexception(if ) map==null ) {return null; } objectobj=bean class.new instance (; beanutils.populate(obj,map ); 返回对象; }//java对象是否要移动到地图公共静态地图? objecttomap(objectobj ) if ) obj==null ) return null; returnnewbeanmap(obj; }使用此方法将java对象转换为映射时,可能会出现以下错误:

exceptioninthread ' main ' Java.lang.noclassdeffounderror 3360 org/Apache/commons/collections/transformeratjava.lava at Java.security.secure class loader.define class (secure class loader.Java 3360124 ) at Java.net.URL class loader.defining Lclassloader.Java:56 ) at Java.net.URLclassloader $1. run ) ) URL class loader () ) URL class at Java.security.acurity at Java.lang.class loader.load class (class loader.Java :307 ) at sun.misc.launcher $ app class loader.load class ) at Java.lang.class loader.load class (class loader.Java :252 ) at Java.lang.class loader.loadclasssinternal ) class atorg.Apache.com mons.beanutils.bean map.clin it (bean map.Java :68 ) atcom.example2. POJO.pojotomap.objectils.objecttttils caused by : Java.lang.classnotfoundexception : org.Apache.com mons.collections.transformeratjava.net.urlcllclasclase ler.doprivileged(nativemethod ) at Java.net.URL class loader.find class (URL class ) URL class at Java.lang.class loader sc.launcher $ app class loader.loadclass ) ) load class ) )。 at Java.lang.class loader.load class (class loader.Java :252 ) at Java.lang.class loader.loadclasssinternal ) class

://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对象转mappublic 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对象转mappublic 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对象转mappublic 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对象转mappublic static Map<String, Object> objectToMap(Object obj) { String jsonStr = JSONObject.toJSONString(obj); return JSONObject.parseObject(jsonStr);}

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

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。