java通过DozerBeanMapper 将源对象内容转换成目标对象内容

参考链接:https://www.iteye.com/blog/uule-2084016

以下内容均为复制参考链接中的:  

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.   
  7. public class BeanMapper  
  8. {  
  9.   private static DozerBeanMapper dozer = new DozerBeanMapper();  
  10.   
  11.   /** 
  12.   * 构造新的destinationClass实例对象,通过source对象中的字段内容 
  13.   * 映射到destinationClass实例对象中,并返回新的destinationClass实例对象。 
  14.   *  
  15.   * @param source 源数据对象 
  16.   * @param destinationClass 要构造新的实例对象Class 
  17.   */  
  18.   public static <T> T map(Object source, Class<T> destinationClass)  
  19.   {  
  20.     return dozer.map(source, destinationClass);  
  21.   }  
  22.     
  23.     
  24.   
  25.   public static <T> List<T> mapList(Collection sourceList, Class<T> destinationClass)  
  26.   {  
  27.     List destinationList = Lists.newArrayList();  
  28.     for (Iterator i$ = sourceList.iterator(); i$.hasNext(); ) { Object sourceObject = i$.next();  
  29.       Object destinationObject = dozer.map(sourceObject, destinationClass);  
  30.       destinationList.add(destinationObject);  
  31.     }  
  32.     return destinationList;  
  33.   }  
  34.   
  35.     
  36.   /** 
  37.   * 将对象source的所有属性值拷贝到对象destination中. 
  38.   *  
  39.   * @param source 对象source 
  40.   * @param destination 对象destination 
  41.   */  
  42.   public static void copy(Object source, Object destinationObject)  
  43.   {  
  44.     dozer.map(source, destinationObject);  
  45.   }  
  46. }  

使用:

  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对象

 

 

  1. public static <T> Map<String, T> toMap(Object target) {  
  2.     return toMap(target,false);  
  3. }  
  4.   
  5. /** 
  6.  * 将目标对象的所有属性转换成Map对象 
  7.  *  
  8.  * @param target 目标对象 
  9.  * @param ignoreParent 是否忽略父类的属性 
  10.  *  
  11.  * @return Map 
  12.  */  
  13. public static <T> Map<String, T> toMap(Object target,boolean ignoreParent) {  
  14.     return toMap(target,ignoreParent,false);  
  15. }  
  16.   
  17. /** 
  18.  * 将目标对象的所有属性转换成Map对象 
  19.  *  
  20.  * @param target 目标对象 
  21.  * @param ignoreParent 是否忽略父类的属性 
  22.  * @param ignoreEmptyValue 是否不把空值添加到Map中 
  23.  *  
  24.  * @return Map 
  25.  */  
  26. public static <T> Map<String, T> toMap(Object target,boolean ignoreParent,boolean ignoreEmptyValue) {  
  27.     return toMap(target,ignoreParent,ignoreEmptyValue,new String[0]);  
  28. }  
  29.   
  30. /** 
  31.  * 将目标对象的所有属性转换成Map对象 
  32.  *  
  33.  * @param target 目标对象 
  34.      * @param ignoreParent 是否忽略父类的属性 
  35.      * @param ignoreEmptyValue 是否不把空值添加到Map中 
  36.      * @param ignoreProperties 不需要添加到Map的属性名 
  37.  */  
  38.     public static <T> Map<String, T> toMap(Object target,boolean ignoreParent,boolean ignoreEmptyValue,String... ignoreProperties) {  
  39.         Map<String, T> map = new HashMap<String, T>();  
  40.           
  41.     List<Field> fields = ReflectionUtils.getAccessibleFields(target.getClass(), ignoreParent);  
  42.       
  43.     for (Iterator<Field> it = fields.iterator(); it.hasNext();) {  
  44.         Field field = it.next();  
  45.         T value = null;  
  46.           
  47.         try {  
  48.             value = (T) field.get(target);  
  49.         } catch (Exception e) {  
  50.             e.printStackTrace();  
  51.         }  
  52.           
  53.         if (ignoreEmptyValue  
  54.                 && ((value == null || value.toString().equals(""))  
  55.                 || (value instanceof Collection && ((Collection<?>) value).isEmpty())  
  56.                 || (value instanceof Map && ((Map<?,?>)value).isEmpty()))) {  
  57.             continue;  
  58.         }  
  59.           
  60.         boolean flag = true;  
  61.         String key = field.getName();  
  62.           
  63.         for (String ignoreProperty:ignoreProperties) {  
  64.             if (key.equals(ignoreProperty)) {  
  65.                 flag = false;  
  66.                 break;  
  67.             }  
  68.         }  
  69.           
  70.         if (flag) {  
  71.             map.put(key, value);  
  72.         }  
  73.     }  
  74.       
  75.         return map;  
  76.     }  
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章