Java 中 Map与JavaBean之间的相互转化

来源:互联网 发布:java ocr 验证码 编辑:程序博客网 时间:2024/05/24 07:11

在做导入的时候,遇到了需要将map对象转化 成javabean的问题,也就是说,不清楚javabean的内部字段排列,只知道map的 key代表javabean的字段名,value代表值。

那现在就需要用转化工具了。是通用的哦!

首先来看 JavaBean 转化成Map的方法:

/**     * 将一个 JavaBean 对象转化为一个  Map     * @param bean 要转化的JavaBean 对象     * @return 转化出来的  Map 对象     * @throws IntrospectionException 如果分析类属性失败     * @throws IllegalAccessException 如果实例化 JavaBean 失败     * @throws InvocationTargetException 如果调用属性的 setter 方法失败     */    @SuppressWarnings({ "rawtypes", "unchecked" })public static Map convertBean(Object bean)            throws IntrospectionException, IllegalAccessException, InvocationTargetException {        Class type = bean.getClass();        Map returnMap = new HashMap();        BeanInfo beanInfo = Introspector.getBeanInfo(type);        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 = readMethod.invoke(bean, new Object[0]);                if (result != null) {                    returnMap.put(propertyName, result);                } else {                    returnMap.put(propertyName, "");                }            }        }        return returnMap;    }

下面是将Map转化成JavaBean对象的方法:

/**     * 将一个 Map 对象转化为一个 JavaBean     * @param type 要转化的类型     * @param map 包含属性值的 map     * @return 转化出来的 JavaBean 对象     * @throws IntrospectionException 如果分析类属性失败     * @throws IllegalAccessException 如果实例化 JavaBean 失败     * @throws InstantiationException 如果实例化 JavaBean 失败     * @throws InvocationTargetException 如果调用属性的 setter 方法失败     */    @SuppressWarnings("rawtypes")public static Object convertMap(Class type, Map map)            throws IntrospectionException, IllegalAccessException,            InstantiationException, InvocationTargetException {        BeanInfo beanInfo = Introspector.getBeanInfo(type); // 获取类属性        Object obj = 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;                descriptor.getWriteMethod().invoke(obj, args);            }        }        return obj;    }

转自:http://blog.csdn.net/chenxuejiakaren/article/details/7763061

0 0