JavaBean與Map的相互轉換
阿新 • • 發佈:2019-01-04
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) { } }