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

  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. }

使用:

  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. * 将目标对象的所有属性转换成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方法的更多相关文章

  1. 一行代码将两个列表拼接出第三个列表(两个可迭代对象相加产生第三个可迭代对象)--map()方法

    map()方法 map(func, *iterables) --> map object lambda方法: lambda  参数 :返回值 a = map(',7]) print(list(a ...

  2. java 对象转Map方法Demo

    /** * 用于对Object进行解析并且转换成Map键值对的形式 * */ public class ObjectUtils { private static final String JAVAP ...

  3. 转化对象为map方法

    言语不多,直接上代码. private Map<String, Object> introspect(Object obj) throws Exception { Map<Strin ...

  4. react第十单元(children的深入用法-React.Children对象上的方法)

    第十单元(children的深入用法-React.Children对象上的方法) #课程目标 理解什么是children 掌握React.Children对象上的方法 #知识点 什么是children ...

  5. java中两个对象间的属性值复制,比较,转为map方法实现

    package com.franson.study.util; import java.lang.reflect.InvocationTargetException; import java.lang ...

  6. 对象作为 map 的 key 时,需要重写 equals 方法和 hashCode 方法

    对象作为 map 的 key 时,需要重写 hashCode 和 equals方法 如果没有重写 hashCode 方法,那么下面的代码示例会输出 null 我们首先定义一个对象:BmapPoint, ...

  7. JAVA中利用反射机制进行对象和Map相互转换的方法

    JAVA的反射机制主要作用是用来访问对象的属性.方法等等.所以,JAVA中对象和Map相互转换可以利用JAVA的反射机制来实现.例子如下: 一.对象转Map的方法 public static Map& ...

  8. Jquery遍历筛选数组的几种方法和遍历解析json对象|Map()方法详解

    Jquery遍历筛选数组的几种方法和遍历解析json对象|Map()方法详解 一.Jquery遍历筛选数组 1.jquery grep()筛选遍历数组 $().ready( function(){ v ...

  9. Java中将对象转换为Map的方法

    将对象转换为Map的方法,代码如下: /** * 将对象转成TreeMap,属性名为key,属性值为value * @param object 对象 * @return * @throws Illeg ...

随机推荐

  1. 文件上传下载,命令之wget / curl / which / sort / uniq / cut / wc /tr /sed

    目录 命令 1.文件的上传下载 2.从外网下载文件wget 3.curl文件下载 4.查找命令which 5.字符处理命令-排序sort 6.字符处理-去重uniq 7.字符处理-截取cut 8.字符 ...

  2. luogu2580 于是他错误的点名开始了 Trie树

    模板题 #include <iostream> #include <cstring> #include <cstdio> using namespace std; ...

  3. windows系统使用的误区

    1.软件不要装在c盘,影响系统运行速度. 软件c盘不会影响系统运行,会提高软件运行速度 PS:前提条件:C盘有足够的空余空间(50G以上). 大多数软件安装默认路径在C盘的原因是不知道电脑分区的情况, ...

  4. DS博客作业05——树

    1.本周学习总结 1.1思维导图 1.2学习体会 学习:相比于之前的数据结构,树多了很多性质,相应的也多了很多计算题,不得不说,专有名词也是颇多.觉得树最独特的地方就是它的兄弟.孩子结点,用以组成了它 ...

  5. js 抓取页面数据

    数据抓取 主要思路和原理 在根节点document中监听所有需要抓取的事件 在元素事件传递中,捕获阶段获取事件信息,进行埋点 通过getBoundingClientRect() 方法可获取元素的大小和 ...

  6. map/set/object/array对比

    map () { //数据结构横向对比, 增,查,改,删 let map = new Map() let array = [] //增 map.set('t',1) array.push({t:1}) ...

  7. BZOJ4259 残缺的字符串 【fft】

    题目 很久很久以前,在你刚刚学习字符串匹配的时候,有两个仅包含小写字母的字符串A和B,其中A串长度为m,B串长度为n.可当你现在再次碰到这两个串时,这两个串已经老化了,每个串都有不同程度的残缺. 你想 ...

  8. djang中的request.user对象中的方法

    print(dir(request.user)) ['__class__', '__delattr__', '__dict__', '__doc__', '__eq__', '__format__', ...

  9. chef and churu 分块 好题

    题目大意 有一个长度为n的数组A 有n个函数,第i个函数 \[f(l[i],r[i])=\sum_{k=l[i]}^{r[i]}A_k\] 有两种操作: 1)修改A[i] 2)询问第x-y个函数值的和 ...

  10. Oracle For 循环添加数据

    自己亲自使用的,绝对OK --添加数据declare i number; --用for实现 begin for i in 0 .. 500 loop insert into cust(custsn,t ...