map Javabean 互转
来源:互联网 发布:c定义二维数组下标越界 编辑:程序博客网 时间:2024/05/29 13:55
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.Date;import java.util.HashMap;import java.util.Map;public class BeanToMapUtils { /** * 将一个 Map 对象转化为一个 JavaBean * @param clazz 要转化的类型 * @param map 包含属性值的 map * @return 转化出来的 JavaBean 对象 * @throws IntrospectionException 如果分析类属性失败 * @throws IllegalAccessException 如果实例化 JavaBean 失败 * @throws InstantiationException 如果实例化 JavaBean 失败 * @throws InvocationTargetException 如果调用属性的 setter 方法失败 */ @SuppressWarnings("rawtypes") public static <T> T toBean(Class<T> clazz, Map map) { T obj = null; try { BeanInfo beanInfo = Introspector.getBeanInfo(clazz); obj = clazz.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 起来,这样当一个属性赋值失败的时候就不会影响其他属性赋值。 // 通过setProperty()方法获取参数数据类型 Class fieldType = descriptor.getWriteMethod().getParameterTypes()[0]; // 判断数据类型并从结果集中获取数据 Object value = formatValue(map, fieldType, propertyName); if ("".equals(value)) { value = null; } Object[] args = new Object[1]; args[0] = value; try { descriptor.getWriteMethod().invoke(obj, args); } catch (InvocationTargetException e) { System.out.println("字段映射失败"); } } } } catch (IllegalAccessException e) { System.out.println("实例化 JavaBean 失败"); } catch (IntrospectionException e) { System.out.println("分析类属性失败"); } catch (IllegalArgumentException e) { System.out.println("映射错误"); } catch (InstantiationException e) { System.out.println("实例化 JavaBean 失败"); } return (T) obj; } /** * 将一个 JavaBean 对象转化为一个 Map * @param bean 要转化的JavaBean 对象 * @return 转化出来的 Map 对象 * @throws IntrospectionException 如果分析类属性失败 * @throws IllegalAccessException 如果实例化 JavaBean 失败 * @throws InvocationTargetException 如果调用属性的 setter 方法失败 */ @SuppressWarnings("rawtypes") public static Map toMap(Object bean) { Class<? extends Object> clazz = bean.getClass(); Map<Object, Object> returnMap = new HashMap<Object, Object>(); BeanInfo beanInfo = null; try { beanInfo = Introspector.getBeanInfo(clazz); PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors(); for (int i = 0; i < propertyDescriptors.length; i++) { PropertyDescriptor descriptor = propertyDescriptors[i]; String propertyName = descriptor.getName(); if (!propertyName.equals("class")) { Method readMethod = descriptor.getReadMethod(); Object result = null; result = readMethod.invoke(bean, new Object[0]); if (null != propertyName) { propertyName = propertyName.toString(); } if (null != result) { result = result.toString(); } returnMap.put(propertyName, result); } } } catch (IntrospectionException e) { System.out.println("分析类属性失败"); } catch (IllegalAccessException e) { System.out.println("实例化 JavaBean 失败"); } catch (IllegalArgumentException e) { System.out.println("映射错误"); } catch (InvocationTargetException e) { System.out.println("调用属性的 setter 方法失败"); } return returnMap; } /** * 将map中数据与bean中属性类型一致 * * @param map * @param fieldType * 属性类型 * @param fieldName * 属性名 * @return */ private static Object formatValue(Map<String, String> map, Class fieldType, String fieldName) { Object value = null; if (fieldType == Integer.class || "int".equals(fieldType.getName())) { if (map.get(fieldName) != null) { value = Integer.parseInt(map.get(fieldName)); } } else if (fieldType == Float.class || "float".equals(fieldType.getName())) { if (map.get(fieldName) != null) { value = Float.parseFloat(map.get(fieldName)); } } else if (fieldType == Double.class || "double".equals(fieldType.getName())) { if (map.get(fieldName) != null) { value = Double.parseDouble(map.get(fieldName)); } } else if (fieldType == Date.class || fieldType == java.util.Date.class) { if (map.get(fieldName) != null) { value = Date.valueOf(map.get(fieldName)); } } else { value = map.get(fieldName); } return value; } }`
感谢 http://www.programgo.com/article/5133689737/ 的代码,但是代码有缺陷格式化数据是错的,老报数据类型异常。故把数据格式根据参数类型转化。
0 0
- map Javabean 互转
- javabean与map互转
- javaBean与Map<String,Object>互转
- javaBean与Map<String,Object>互转 .
- javaBean与Map<String,Object>互转
- javaBean与Map<String,Object>互转
- javaBean与Map<String,Object>互转
- javaBean与Map<String,Object>互转
- javaBean与Map<String,Object>互转
- Java Map和JavaBean(Model)互转
- javaBean与Map<String,Object>互转
- javaBean与Map<String,Object>互转
- javaBean与Map<String,Object>互转
- Map对象与JavaBean互转,List<Map>与List<JavaBean>互转等
- JavaBean 转 Map
- 普通javabean转成Map
- JavaBean对象转map
- JavaBean转换为Map
- 操作系统与网络实现 之十九(戊)
- Android储存小型数据到本地
- JVM原理和优化
- char *p = NULL,int *p = NULL的区别
- SSH连接本地虚拟机失败解决方法
- map Javabean 互转
- nodeJS process
- 动态创建二维数组
- label
- 七层和四层网络协议模型功能介绍
- Aggregation-聚合
- [数论模板] BZOJ 3667 Rabin-Miller算法
- [编程题]质数因子
- 取消页面中的图片拖拽效果以及取消文字的选中效果