Java--Map与实体类对象之间互转⼀、json转换
依赖阿⾥的FastJSon,⽤到的主要jar包:fastjson-1.2.54.jar
1、maven引⼊
1<dependency>
2 <groupId>com.alibaba</groupId>
3 <artifactId>fastjson</artifactId>
4 <version>1.2.54</version>
5</dependency>
2、类引⼊
import com.alibaba.fastjson.JSON;
3、转换
简单使⽤
1//map转对象
2User user = JSON.JSONString(map), User.class);
3
4//对象转map
5Map<String, Object> map = JSONObject.JSONString(user));
封装提取⽅法
1//map转java对象
2public static Object mapToObject(Map<String, Object> map, Class<?> bean) throws Exception {
3 String jsonStr = JSONString(map);
4 return JSONObject.parseObject(jsonStr, Bean.Class);
5}
6
7//java对象转map
8public static Map<String, Object> objectToMap(Object obj) {
9 String jsonStr = JSONString(obj);
10 return JSONObject.parseObject(jsonStr, Map.Class);
11}
⼆、使⽤org.apachemons.beanutils转换
⽤到的主要jar包:commons-beanutils-1.9.3.jar
2public static Object mapToObject(Map<String, Object> map, Class<?> beanClass)
3 throws Exception {
4 if (map == null) {
5 return null;
6 }
7 Object obj = wInstance();
8 BeanUtils.populate(obj, map);
9 return obj;
10 }
11
12//java对象转map
13public static Map<?, ?> objectToMap(Object obj) {
14 if (obj == null)
15 return null;
16 return new BeanMap(obj);
17 }
在使⽤该⽅法进⾏java对象转map时,可能会发⽣以下错误:
1Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/collections/Transformer
2 at java.lang.ClassLoader.defineClass1(Native Method)
3 at java.lang.ClassLoader.defineClass(ClassLoader.java:621)
4 at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:124)
5 at java.URLClassLoader.defineClass(URLClassLoader.java:260)
6 at java.URLClassLoader.access$000(URLClassLoader.java:56)
7 at java.URLClassLoader$1.run(URLClassLoader.java:195)
8 at java.security.AccessController.doPrivileged(Native Method)
9 at java.URLClassLoader.findClass(URLClassLoader.java:188)
10 at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
11 at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
12 at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
13 at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
14 at org.apachemons.ateTypeTransformers(BeanMap.java:132)
15 at org.apachemons.beanutils.BeanMap.<clinit>(BeanMap.java:68)
16 ample2.pojo.PojoToMap.objectToMap(PojoToMap.java:23)
17 ample2.pojo.PojoToMap.main(PojoToMap.java:16)
18Caused by: java.lang.ClassNotFoundException: llections.Transformer
19 ...
从报错信息上看,是缺少了llections.Transformer类,⽹上下载commons-collections-3.2.1.jar包,引⼊后,重新执⾏,成功
三、使⽤Introspector转换
5 Object obj = wInstance();
6 BeanInfo beanInfo = Class());
7 PropertyDescriptor[] propertyDescriptors = PropertyDescriptors();
8 for (PropertyDescriptor property : propertyDescriptors) {
9 Method setter = WriteMethod();
10 if (setter != null) {
11 setter.invoke(obj, (Name()));
12 }
13 }
14 return obj;
15 }
16
17//java对象转map
18public static Map<String, Object> objectToMap(Object obj) throws Exception {
19 if (obj == null) {
20 return null;
21 }
22 Map<String, Object> map = new HashMap<String, Object>();
23 BeanInfo beanInfo = Class());
24 PropertyDescriptor[] propertyDescriptors = beanInfo
25 .getPropertyDescriptors();
26 for (PropertyDescriptor property : propertyDescriptors) {
27 String key = Name();
28 if (keypareToIgnoreCase("class") == 0) {
29 continue;
30 }
31 Method getter = ReadMethod();
32 Object value = getter != null ? getter.invoke(obj) : null;
33 map.put(key, value);
34 }
35 return map;
36}
四、使⽤reflect转换
5 }
6 Object object = wInstance();
7 Field[] fields = DeclaredFields();
8 for (Field field : fields) {
9 int mod = Modifiers();
10 if (Modifier.isFinal(mod) || Modifier.isStatic(mod)) {
11 continue;
12 }
13 field.setAccessible(true);
14 field.set(object, (Name()));
15 }
16 return object;
17 }
18
19//java对象转map
20public static Map<String, Object> objectToMap(Object obj) throws Exception {
21 if (obj == null) {
22 return null;
23 }
24 Map<String, Object> map = new HashMap<String, Object>();
25 Field[] declaredFields = Class().getDeclaredFields();
26 for (Field field : declaredFields) {
27 field.setAccessible(true);
28 map.Name(), (obj));
29 }
30 return map;
31}
五、使⽤lib.beans.BeanMap转换
⽤到的主要jar包:cglib-2.2.2.jar
1//map转java对象
2public static Object mapToObject(Map<String, Object> map, Class<?> beanClass) throws Exception {
3 Object object = wInstance();
4 BeanMap beanMap = ate(object);
5 beanMap.putAll(map);
6 return object;
json转换对象7}
8
9//java对象转map
10public static Map<String, Object> objectToMap(Object obj) {
11 Map<String, Object> map = wHashMap();
12 if (obj != null) {
13 BeanMap beanMap = ate(obj);
14 for (Object key : beanMap.keySet()) {
15 map.put(key + "", (key));
16 }
17 }
18 return map;
19}
在使⽤本⽅法进⾏map转java对象时,可能会发⽣以下错误:
1Exception in thread "main" java.lang.NoClassDefFoundError: org/objectweb/asm/Type
2 at TypeUtils.parseType(TypeUtils.java:184)
3 at KeyFactory.<clinit>(KeyFactory.java:66)
4 at lib.beans.BeanMap$Generator.<clinit>(BeanMap.java:64)
5 at lib.ate(BeanMap.java:56)
6 ample2.pojo.MapToPojo.mapToBean(MapToPojo.java:27)
7 ample2.pojo.MapToPojo.main(MapToPojo.java:18)
8Caused by: java.lang.ClassNotFoundException: org.objectweb.asm.Type
9 at java.URLClassLoader$1.run(URLClassLoader.java:200)
10 at java.security.AccessController.doPrivileged(Native Method)
11 at java.URLClassLoader.findClass(URLClassLoader.java:188)
12 at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
13 at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
14 at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
15 at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
16 ... 6 more
从错误信息上看,是缺少了org.objectweb.asm.Type类,从⽹上下载了bjectweb.asm-3.2.0.jar包,引⼊后,再次执⾏,成功
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论