在实际开发过程中会经常遇到java.util.Map转换成java Bean的场景,以下给我在常用的几种转换方式;
1、利用fastjson转换
/**
* 人
* @author danjun.yi
* @version 0.0.1
* @since 2020/4/29
**/
public class Person {
/**
* 姓名
*/
private String name;
/**
* 年龄
*/
private int age;
/**
* 性别
*/
private String sex;
/**
* 地址
*/
private String address;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
", sex='" + sex + '\'' +
", address='" + address + '\'' +
'}';
}
}
public static void main(String[] args) {
Map<String, Object> map = new HashMap<>();
map.put("name", "小明");
map.put("age", 10);
map.put("sex", "男");
map.put("address", "南京路101号");
Person person = JSONObject.parseObject(JSON.toJSONString(map), new TypeReference<Person>(){});
System.out.println(person);
}
结果:
Person{name='小明', age=10, sex='男', address='南京路101号'}
2、使用java反射
public static void main(String[] args) {
Map<String, Object> map = new HashMap<>();
map.put("name", "小明");
map.put("age", 10);
map.put("sex", "男");
map.put("address", "南京路101号");
Person person = toBean(map, Person.class);
System.out.println(person);
}
public static <T> T toBean(Map<String, Object> map, Class<T> type) {
try {
T beanInstance = type.getConstructor().newInstance();
for (Map.Entry<String, Object> entry : map.entrySet()) {
String key = entry.getKey();
Object value = entry.getValue();
if (value != null) {
try {
Field field = type.getDeclaredField(key);
field.setAccessible(true);
field.set(beanInstance, value);
field.setAccessible(false);
} catch (Exception e) {
e.printStackTrace();
}
}
}
return beanInstance;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
结果:
Person{name='小明', age=10, sex='男', address='南京路101号'}
3、使用spring中的 org.springframework.cglib.beans.BeanMap
public static void main(String[] args) {
Map<String, Object> map = new HashMap<>();
map.put("name", "小明");
map.put("age", 10);
map.put("sex", "男");
map.put("address", "南京路101号");
Person person = mapToBean(map, Person.class);
System.out.println(person);
}
public static <T> T mapToBean(Map<String, Object> map, Class<T> type) {
try {
T bean = type.getConstructor().newInstance();
BeanMap beanMap = BeanMap.create(bean);
beanMap.putAll(map);
return bean;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
结果:
Person{name='小明', age=10, sex='男', address='南京路101号'}
总结
以上三种方法都有在实际开发中使用,经过本地实际性能测试,方法1和方法2耗时基本一致,要优于方法3。方法1还可以转换复杂类型,方法2和方法3只能转换简单类型。
你在实际开发中最常使用哪种方法呢?