Smail_
2016-10-19 11:39:55
原
java基于反射的Map转Bean的工具类
看标题就知道这是做啥的,我自己也在使用。
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.sql.Timestamp; import java.util.Date; import java.util.Map; /** * * @ClassName: Transformation * @Description: 数据类型转换 * * @author yangtao * @since 2016年10月19日 上午11:36:33 * */ public class Transformation { /** * * @Title: setMethodValue * @Description: 调用object的set方法,对obj的属性赋值 * * @author yangtao * @since 2016年10月19日 上午11:37:35 * * @param obj * @param method * @param objects * @throws IllegalAccessException * @throws IllegalArgumentException * @throws InvocationTargetException void */ private static void setMethodValue(Object obj, Method method, Object objects) throws IllegalAccessException, IllegalArgumentException, InvocationTargetException { if (Timestamp.class.getName().equals(method.getParameterTypes()[0].getName())) { if (null != objects && !"null".equals(objects)) { method.invoke(obj, new Timestamp((long) objects)); } } else if (Date.class.getName().equals(method.getParameterTypes()[0].getName())) { if (null != objects && !"null".equals(objects)) { method.invoke(obj, new Timestamp((long) objects)); } } else if (java.sql.Date.class.getName().equals(method.getParameterTypes()[0].getName())) { if (null != objects && !"null".equals(objects)) { method.invoke(obj, new Timestamp((long) objects)); } } else { method.invoke(obj, objects); } } /** * * @Title: convertMap * @Description: 将一个 Map 对象转化为一个 JavaBean * * @author yangtao * @since 2016年10月19日 上午11:37:24 * * @param type * @param map * @return * @throws IntrospectionException * @throws IllegalAccessException * @throws InstantiationException * @throws InvocationTargetException T */ @SuppressWarnings("rawtypes") public static <T> T convertMap(Class<T> type, Map map) throws IntrospectionException, IllegalAccessException, InstantiationException, InvocationTargetException { BeanInfo beanInfo = Introspector.getBeanInfo(type); // 获取类属性 T instance = type.newInstance(); // 创建 JavaBean 对象 // 给 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; setMethodValue(instance, descriptor.getWriteMethod(), value); } } return instance; } }
使用方法:
Transformation.convertMap(SysFile.class, (Map<String, Object>) dataInfo.getData());
返回值为SysFile的实体对象
猜你喜欢
请下载代码后再发表评论
相关代码
最近下载
最近浏览
3334004690 LV10
3月7日
小小123123 LV1
2020年11月17日
Gyq灬ming LV11
2020年6月22日
hekaiyun
2020年4月22日
暂无贡献等级
freedom2017 LV14
2020年3月30日
弥尘123456 LV4
2020年2月19日
胖胖来了 LV4
2019年11月7日
王有宇 LV1
2019年8月21日
hueihueizaici LV2
2019年8月1日
ZYDREAM LV3
2019年5月16日