引言
在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互转的资料请关注代码网其它相关文章!
发表评论