引言
在java开发中,经常需要将java对象转换成map,或者反过来将map转换成java对象。这种转换在很多场景下都非常有用,比如在序列化和反序列化过程中、在数据传输和持久化时、或者在进行对象属性的批量操作时。
本文将介绍几种不同的方法来实现java对象和map之间的相互转换,选择哪种方法取决于项目的具体需求和个人偏好。
一、使用spring framework的reflectionutils
1.1、bean转为map
@test public void bean2map(){ person person=new person(); person.setname("tiger"); person.setage(18); person.setaddress("中国"); person.setcity("深圳"); system.out.println(person); system.out.println(bean2map(person)); system.out.println(bean2map2(person)); } public static map<string, object> bean2map(object object) { map<string, object> map = new hashmap<>(); reflectionutils.dowithfields(object.getclass(), field -> { field.setaccessible(true); object value = reflectionutils.getfield(field, object); if (value != null) { map.put(field.getname(), value); } }); return map; } public static map<string, object> bean2map2(object object) { map<string, object> map = new hashmap<>(); class<?> clazz = object.getclass(); field[] fields = clazz.getdeclaredfields(); for (field field : fields) { field.setaccessible(true); try { object value = field.get(object); if (value != null) { map.put(field.getname(), value); } } catch (illegalaccessexception e) { throw new runtimeexception("error accessing field: " + field.getname(), e); } } return map; }
结果输出:
1.2、map转为bean
@test public void map2bean() throws illegalaccessexception, instantiationexception { map<string, object> map = new hashmap(); map.put("name", "tigerhhzz"); map.put("age", 18); map.put("address","中国"); map.put("city", "北京"); system.out.println(map); system.out.println(map2bean(map, person.class)); system.out.println(map2bean2(map, person.class)); } public static <t> t map2bean(map<string, object> map, class<t> clazz) throws illegalaccessexception, instantiationexception { t instance = clazz.newinstance(); reflectionutils.dowithfields(clazz, field -> { field.setaccessible(true); if (map.containskey(field.getname())) { reflectionutils.setfield(field, instance, map.get(field.getname())); } }); return instance; } public static <t> t map2bean2(map<string, object> map, class<t> clazz) throws illegalaccessexception, instantiationexception { t instance = clazz.newinstance(); field[] fields = clazz.getdeclaredfields(); for (field field : fields) { field.setaccessible(true); if (map.containskey(field.getname())) { field.set(instance, map.get(field.getname())); } } return instance; }
结果输出:
二、使用hutool工具
2.1、引入hutool依赖
<dependency> <groupid>cn.hutool</groupid> <artifactid>hutool-all</artifactid> <version>5.5.9</version> </dependency>
2.2、bean转为map
@test public void bean2map(){ person person=new person(); person.setname("tiger"); person.setage(18); person.setaddress("中国"); person.setcity("深圳"); map<string, object> map = beanutil.beantomap(person); system.out.println(person); system.out.println(bean2map(person)); system.out.println(bean2map2(person)); system.out.println(map); }
结果输出:
2.3、map转为bean
@test public void map2bean() throws illegalaccessexception, instantiationexception { map<string, object> map = new hashmap(); map.put("name", "tigerhhzz"); map.put("age", 18); map.put("address","中国"); map.put("city", "北京"); person person = beanutil.tobean(map, person.class); system.out.println(map); system.out.println(map2bean(map, person.class)); system.out.println(map2bean2(map, person.class)); system.out.println(person); }
结果输出:
三、使用jackson工具
3.1、bean转为map
@test public void bean2map(){ person person=new person(); person.setname("tiger"); person.setage(18); person.setaddress("中国"); person.setcity("深圳"); map<string, object> map = beanutil.beantomap(person); system.out.println(person); system.out.println(bean2map(person)); system.out.println(bean2map2(person)); system.out.println(map); system.out.println(bean2mapbyjackson(person)); }
转换方法:
public static map<string, object> bean2mapbyjackson(object object) { objectmapper objectmapper = new objectmapper(); return objectmapper.convertvalue(object, new typereference<map<string, object>>() { }); }
结果输出:
3.2、map转为bean
@test public void map2bean() throws illegalaccessexception, instantiationexception { map<string, object> map = new hashmap(); map.put("name", "tigerhhzz"); map.put("age", 18); map.put("address","中国"); map.put("city", "北京"); person person = beanutil.tobean(map, person.class); system.out.println(map); system.out.println(map2beanbyreflectionutils(map, person.class)); system.out.println(map2bean2byreflectionutils(map, person.class)); system.out.println(person); system.out.println(map2beanbyjackson(map, person.class)); }
转换方法:
public static <t> t map2beanbyjackson(map<string, object> map, class<t> clazz){ objectmapper objectmapper = new objectmapper(); return objectmapper.convertvalue(map, clazz); }
结果输出:
四、使用apache commons lang的beanutils
4.1、引入依赖
<!-- commons-lang3 --> <dependency> <groupid>org.apache.commons</groupid> <artifactid>commons-lang3</artifactid> <version>3.12.0</version> </dependency> <dependency> <groupid>commons-beanutils</groupid> <artifactid>commons-beanutils</artifactid> <version>1.9.4</version> </dependency>
4.2、bean转为map
转换方法:
public static map<string, string> bean2mapbycommonslang3(object object) { try { return beanutils.describe(object); } catch (exception e) { throw new runtimeexception("error converting object to map: " + e.getmessage(), e); } }
@test public void bean2map(){ person person=new person(); person.setname("tiger"); person.setage(18); person.setaddress("中国"); person.setcity("深圳"); map<string, object> map = beanutil.beantomap(person); system.out.println(person); system.out.println(bean2map(person)); system.out.println(bean2map2(person)); system.out.println(map); system.out.println(bean2mapbyjackson(person)); system.out.println(bean2mapbycommonslang3(person)); }
结果输出:
4.3、map转为bean
转换方法:
public static <t> t map2beanbycommonslang3(map<string, ?> map, class<t> clazz) { try { t instance = clazz.newinstance(); beanutils.populate(instance, map); return instance; } catch (exception e) { throw new runtimeexception("error converting map to object: " + e.getmessage(), e); } }
@test public void map2bean() throws illegalaccessexception, instantiationexception { map<string, object> map = new hashmap(); map.put("name", "tigerhhzz"); map.put("age", 18); map.put("address","中国"); map.put("city", "北京"); person person = beanutil.tobean(map, person.class); system.out.println(map); system.out.println(map2beanbyreflectionutils(map, person.class)); system.out.println(map2bean2byreflectionutils(map, person.class)); system.out.println(person); system.out.println(map2beanbyjackson(map, person.class)); system.out.println(map2beanbycommonslang3(map, person.class)); }
结果输出:
五、使用fastjson工具
5.1、 引入fastjson依赖
<dependency> <groupid>com.alibaba</groupid> <artifactid>fastjson</artifactid> <version>1.2.83</version> </dependency>
5.2、 bean转为map
@test public void bean2map(){ person person=new person(); person.setname("tiger"); person.setage(18); person.setaddress("中国"); person.setcity("深圳"); map<string, object> map = beanutil.beantomap(person); system.out.println(person); system.out.println(bean2map(person)); system.out.println(bean2map2(person)); system.out.println(map); system.out.println(bean2mapbyjackson(person)); system.out.println(bean2mapbycommonslang3(person)); system.out.println(jsonobject.parseobject(jsonobject.tojsonstring(person))); }
结果输出:
5.3、 map转为bean
@test public void map2bean() throws illegalaccessexception, instantiationexception { map<string, object> map = new hashmap(); map.put("name", "tigerhhzz"); map.put("age", 18); map.put("address","中国"); map.put("city", "北京"); person person = beanutil.tobean(map, person.class); system.out.println(map); system.out.println(map2beanbyreflectionutils(map, person.class)); system.out.println(map2bean2byreflectionutils(map, person.class)); system.out.println(person); system.out.println(map2beanbyjackson(map, person.class)); system.out.println(map2beanbycommonslang3(map, person.class)); system.out.println(jsonobject.parseobject(jsonobject.tojsonstring(map), person.class)); }
结果输出:
以上就是java对象和map之间相互转换的五种方法的详细内容,更多关于java对象和map互转的资料请关注代码网其它相关文章!
发表评论