1. 程式人生 > >DozerBeanMapper + 對象轉Map方法

DozerBeanMapper + 對象轉Map方法

access data repr tac pro new exception 但是 tde

1、簡介
dozer是一種JavaBean的映射工具,類似於apache的BeanUtils。但是dozer更強大,它可以靈活的處理復雜類型之間的映射。不但可以進行簡單的屬性映射、復雜的類型映射、雙向映射、遞歸映射等,並且可以通過XML配置文件進行靈活的配置。

2、準備
現在開始就小試一下。
首先,需要下載jar包,
dozer.jar :http://dozer.sourceforge.net/downloading.html
還需要slf4j.jar,commons-lang.jar,commons-beanutil.jar, commons-loggin.jar

http://lishaorui.iteye.com/blog/1151513

Java代碼
  1. import com.google.common.collect.Lists;
  2. import java.util.Collection;
  3. import java.util.Iterator;
  4. import java.util.List;
  5. import org.dozer.DozerBeanMapper;
  6. public class BeanMapper
  7. {
  8. private static DozerBeanMapper dozer = new DozerBeanMapper();
  9. /**
  10. * 構造新的destinationClass實例對象,通過source對象中的字段內容
  11. * 映射到destinationClass實例對象中,並返回新的destinationClass實例對象。
  12. *
  13. * @param source 源數據對象
  14. * @param destinationClass 要構造新的實例對象Class
  15. */
  16. public static <T> T map(Object source, Class<T> destinationClass)
  17. {
  18. return dozer.map(source, destinationClass);
  19. }
  20. public static <T> List<T> mapList(Collection sourceList, Class<T> destinationClass)
  21. {
  22. List destinationList = Lists.newArrayList();
  23. for (Iterator i$ = sourceList.iterator(); i$.hasNext(); ) { Object sourceObject = i$.next();
  24. Object destinationObject = dozer.map(sourceObject, destinationClass);
  25. destinationList.add(destinationObject);
  26. }
  27. return destinationList;
  28. }
  29. /**
  30. * 將對象source的所有屬性值拷貝到對象destination中.
  31. *
  32. * @param source 對象source
  33. * @param destination 對象destination
  34. */
  35. public static void copy(Object source, Object destinationObject)
  36. {
  37. dozer.map(source, destinationObject);
  38. }
  39. }

使用:

Java代碼
  1. SmIaasQuotaV result = null;
  2. try {
  3. result = limitService.getLimitDetails(id,parentId);
  4. if(result != null){
  5. response.setData(BeanMapper.map(result, Map.class));
  6. response.setSuccess(true);
  7. }
  8. }

BeanMapper.map(result, Map.class)

轉換為Map對象。

Java代碼
    1. public static <T> Map<String, T> toMap(Object target) {
    2. return toMap(target,false);
    3. }
    4. /**
    5. * 將目標對象的所有屬性轉換成Map對象
    6. *
    7. * @param target 目標對象
    8. * @param ignoreParent 是否忽略父類的屬性
    9. *
    10. * @return Map
    11. */
    12. public static <T> Map<String, T> toMap(Object target,boolean ignoreParent) {
    13. return toMap(target,ignoreParent,false);
    14. }
    15. /**
    16. * 將目標對象的所有屬性轉換成Map對象
    17. *
    18. * @param target 目標對象
    19. * @param ignoreParent 是否忽略父類的屬性
    20. * @param ignoreEmptyValue 是否不把空值添加到Map中
    21. *
    22. * @return Map
    23. */
    24. public static <T> Map<String, T> toMap(Object target,boolean ignoreParent,boolean ignoreEmptyValue) {
    25. return toMap(target,ignoreParent,ignoreEmptyValue,new String[0]);
    26. }
    27. /**
    28. * 將目標對象的所有屬性轉換成Map對象
    29. *
    30. * @param target 目標對象
    31. * @param ignoreParent 是否忽略父類的屬性
    32. * @param ignoreEmptyValue 是否不把空值添加到Map中
    33. * @param ignoreProperties 不需要添加到Map的屬性名
    34. */
    35. public static <T> Map<String, T> toMap(Object target,boolean ignoreParent,boolean ignoreEmptyValue,String... ignoreProperties) {
    36. Map<String, T> map = new HashMap<String, T>();
    37. List<Field> fields = ReflectionUtils.getAccessibleFields(target.getClass(), ignoreParent);
    38. for (Iterator<Field> it = fields.iterator(); it.hasNext();) {
    39. Field field = it.next();
    40. T value = null;
    41. try {
    42. value = (T) field.get(target);
    43. } catch (Exception e) {
    44. e.printStackTrace();
    45. }
    46. if (ignoreEmptyValue
    47. && ((value == null || value.toString().equals(""))
    48. || (value instanceof Collection && ((Collection<?>) value).isEmpty())
    49. || (value instanceof Map && ((Map<?,?>)value).isEmpty()))) {
    50. continue;
    51. }
    52. boolean flag = true;
    53. String key = field.getName();
    54. for (String ignoreProperty:ignoreProperties) {
    55. if (key.equals(ignoreProperty)) {
    56. flag = false;
    57. break;
    58. }
    59. }
    60. if (flag) {
    61. map.put(key, value);
    62. }
    63. }
    64. return map;
    65. }

DozerBeanMapper + 對象轉Map方法