import java.beans.BeanInfo;
import java.beans.Introspector;
import java.beans.PropertyDescriptor;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import org.apache.commons.beanutils.BeanUtils;
public class BeanUtil {
/**
* 将 List<Map>对象转化为List<JavaBean> 此方法已通过测试
*
* @author 奈何闯天涯
* @param type
* @param map
* @return Object对象
* @version 2018.05.07
*/
public static <T> List<T> convertListMap2ListBean(
List<Map> listMap, Class T) throws Exception {
List<T> beanList = new ArrayList<T>();
for (int i = 0, n = listMap.size(); i < n; i++) {
Map map = listMap.get(i);
T bean = convertMap2Bean(map, T);
beanList.add(bean);
}
return beanList;
}
/**
* 将 Map对象转化为JavaBean 此方法已经测试通过
*
* @author 奈何闯天涯
* @param type
* @param map
* @return Object对象
* @version 2018.05.07
*/
public static <T> T convertMap2Bean(Map map, Class T) throws Exception {
if (map == null || map.size() == 0) {
return null;
}
BeanInfo beanInfo = Introspector.getBeanInfo(T);
T bean = (T) T.newInstance();
PropertyDescriptor[] propertyDescriptors = beanInfo
.getPropertyDescriptors();
for (int i = 0, n = propertyDescriptors.length; i < n; i++) {
PropertyDescriptor descriptor = propertyDescriptors[i];
String propertyName = descriptor.getName();
// String upperPropertyName = propertyName.toUpperCase();
if (map.containsKey(propertyName)) {
Object value = map.get(propertyName);
// 这个方法不会报参数类型不匹配的错误。
BeanUtils.copyProperty(bean, propertyName, value);
// 用这个方法对int等类型会报参数类型不匹配错误,需要我们手动判断类型进行转换,比较麻烦。
// descriptor.getWriteMethod().invoke(bean, value);
// 用这个方法对时间等类型会报参数类型不匹配错误,也需要我们手动判断类型进行转换,比较麻烦。
// BeanUtils.setProperty(bean, propertyName, value);
}
}
return bean;
}
}
原生的map转bean
最新推荐文章于 2024-04-19 04:42:24 发布