JavaBean与Map的相互转换

2019-1-3

package com.bizvane.utils.tools;

import java.lang.reflect.Field;
import java.util.Arrays;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Set;

import org.apache.log4j.Logger;
import org.springframework.util.StringUtils;

public class BeanUtils extends org.apache.commons.beanutils.BeanUtils
{
    private static final Logger logger = Logger.getLogger(BeanUtils.class);
    
    private static final String EXCLUDE_UID = "serialVersionUID";
    
    /**
     * 类转换为map
    * @param bean
    * @param isExcludeUid 是否排除序列化
    * @param isExcludeNullOrEmpty 是否排除空或者null值
    * @param isAsc 是否ascii排序
    * @return 【参数说明】
    * 
    * @return Map<String,Object> 【返回类型说明】
    * @exception throws 【违例类型】 【违例说明】
    * @see 【类、类#方法、类#成员】
     */
    public static Map<String, Object> beanToMap(Object bean,
            boolean isExcludeUid, boolean isExcludeNullOrEmpty, boolean isAsc)
    {
        if (null == bean)
        {
            return null;
        }
        
        Map<String, Object> result = new HashMap<String, Object>();
        try
        {
            Field[] fields = bean.getClass().getDeclaredFields();
            for (Field field : fields)
            {
                //解除访问权限
                field.setAccessible(true);
                String key = field.getName();//属性名
                
                //排除序列化产生的serialVersionUID
                if (isExcludeUid && !StringUtils.isEmpty(key)
                        && EXCLUDE_UID.equals(key))
                {
                    continue;
                }
                
                Object value = field.get(bean);//值
                //排除值为空的字段
                if (isExcludeNullOrEmpty && null == value)
                {
                    continue;
                }
                result.put(key, value);
                if (isAsc)
                {
                    result = ascSort(result);
                }
            }
        }
        catch (Exception e)
        {
            e.printStackTrace();
            logger.error("bean转换map出错");
        }
        return result;
    }
    
    /**
     * 对map进行ascII排序
     * 
    * @param map
    * @return 【参数说明】
    * 
    * @return Map<String,Object> 【返回类型说明】
    * @exception throws 【违例类型】 【违例说明】
    * @see 【类、类#方法、类#成员】
     */
    public static Map<String, Object> ascSort(Map<String, Object> map)
    {
        
        Map<String, Object> result = new LinkedHashMap<String, Object>();
        Set<String> keySet = map.keySet();
        String[] array = keySet.toArray(new String[keySet.size()]);
        Arrays.sort(array, String.CASE_INSENSITIVE_ORDER);
        for (String key : array)
        {
            result.put(key, map.get(key));
        }
        
        return result;
    }
    
    /**
     * 类转换为map
     * 默认排除UID属性
     * 默认不排除为null值
    * @param bean
    * @return 【参数说明】
    * 
    * @return Map<String,Object> 【返回类型说明】
    * @exception throws 【违例类型】 【违例说明】
    * @see 【类、类#方法、类#成员】
     */
    public static Map<String, Object> beanToMap(Object bean)
    {
        return beanToMap(bean, true, false, false);
    }
    
    /**
     * map转换bean
     * 
    * @param map
    * @param clazz
    * @return 【参数说明】
    * 
    * @return T 【返回类型说明】
    * @exception throws 【违例类型】 【违例说明】
    * @see 【类、类#方法、类#成员】
     */
    public static <T> T mapToBean(Map<String, Object> map, Class<T> clazz)
    {
        T bean = null;
        try
        {
            bean = clazz.newInstance();
            Field[] fields = clazz.getDeclaredFields();//获取属性集合
            //Method[] methods = clazz.getMethods();//获取所有方法
            for (Field field : fields)
            {
                field.setAccessible(true);
                String key = field.getName();
                //排除序列化产生的serialVersionUID
                if (!StringUtils.isEmpty(key) && EXCLUDE_UID.equals(key))
                {
                    continue;
                }
                
                Object value = map.get(key);
                field.set(bean, value);
            }
        }
        catch (Exception e)
        {
            e.printStackTrace();
            logger.error("map转换bean出错");
        }
        return bean;
    }
    
    
    public static void main(String[] args)
    {
        
    }
    
}

下载地址

百度网盘
密码: