com.starmcc.qmframework.tools.base.QmConvertUtil Maven / Gradle / Ivy
package com.starmcc.qmframework.tools.base;
import com.starmcc.qmframework.exception.QmFrameException;
import java.beans.BeanInfo;
import java.beans.IntrospectionException;
import java.beans.Introspector;
import java.beans.PropertyDescriptor;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* Map and Bean Tools
*
* @Author: qm
* @Date: 2019/7/17 17:33
*/
public class QmConvertUtil {
/**
* 将一个 Map 对象转化为一个 JavaBean
*
* @param map 包含属性值的 map
* @param type 要转化的类型
* @return 转化出来的 JavaBean 对象
*/
public static T mapToBean(Map map, Class type) {
try {
// 获取类属性
BeanInfo beanInfo = Introspector.getBeanInfo(type);
// 创建 JavaBean 对象
T obj = type.newInstance();
// 给 JavaBean 对象的属性赋值
PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors();
for (int i = 0; i < propertyDescriptors.length; i++) {
PropertyDescriptor descriptor = propertyDescriptors[i];
String propertyName = descriptor.getName();
if (map.containsKey(propertyName)) {
// 下面一句可以 try 起来,这样当一个属性赋值失败的时候就不会影响其他属性赋值。
Object value = map.get(propertyName);
Object[] args = new Object[1];
args[0] = value;
descriptor.getWriteMethod().invoke(obj, args);
}
}
return obj;
} catch (IntrospectionException e) {
throw new QmFrameException("IntrospectionException 分析类属性失败!");
} catch (InstantiationException e) {
throw new QmFrameException("IllegalAccessException 实例化 JavaBean 失败!");
} catch (IllegalAccessException e) {
throw new QmFrameException("IllegalAccessException 实例化 JavaBean 失败!");
} catch (InvocationTargetException e) {
throw new QmFrameException("InvocationTargetException 调用属性的 setter 方法失败!");
}
}
/**
* 将一个 List 中包含的 map 集合转化为一个 List 中包含的 JavaBean 集合
*
* @param maps 包含属性值的 mapList
* @param type 要转化的类型
* @param 转化出来的 JavaBean 对象 List
* @return
*/
public static List mapsToBeans(List