dozer使用
September 23, 2015
在进行云盘项目开发的时候,经常会遇到将领域模型转化为业务模型,或者将业务模型转化为符合要求的JSON格式,这里面就涉及到大量的 Java Bean to Java Bean 的映射,我们很容易会写出来下面的代码:
这让人很不爽,所以如果两个类结构一样,最常使用的是BeanUtils.copyProperties(src,aim)方法将一个对象的值赋给另一个对象,但是如果属性不同或者名称不同(上面的例子中opver就是一个是String一个是Long)这样是不可以的, 出于职业习惯,再造轮子之前先去翻了翻果然让我找到了dozer这个映射工具。
安装并使用
首先在pom.xml中插入下面的依赖,然后mvn install一下即可安装到项目中
注意如果项目中依赖了mafka的jar包必须按照如下的方法写,否则程序无法运行
然后写好配置文件,加载到dozer中就可以直接映射class
更多的时候我们希望能够使用spring管理我们的依赖,只需要按照下面的写法即可导入配置文件到dozer并被spring所管理
一些高级用法
dozer如果属性名相同可以自动映射很多类型比如String->Long ,Long->String,Data->Timestamp等等,几乎满足所有需求,但是项目中总有一些需要我们配置的奇葩现象,
1,属性名不相同
1,使用注解,如下
2,xml 配置如下
其中a代表源,b代表目标,field代表我们需要映射的属性的名称,这里类型可以是不一样的,自动转换类型支持如下:
Primitive to Primitive Wrapper Primitive to Custom Wrapper Primitive Wrapper to Primitive Wrapper Primitive to Primitive Complex Type to Complex Type String to Primitive String to Primitive Wrapper String to Complex Type if the Complex Type contains a String constructor String to Map Collection to Collection Collection to Array Map to Complex Type Map to Custom Map Type Enum to Enum Each of these can be mapped to one another: java.util.Date, java.sql.Date, java.sql.Time, java.sql.Timestamp, java.util.Calendar, java.util.GregorianCalendar String to any of the supported Date/Calendar Objects. Objects containing a toString() method that produces a long representing time in (ms) to any supported Date/Calendar object.
会使用上面的方法,基本满足我们90%的日常开发,但是貌似还是有一些情况不能用这种方式自动转换,比如云盘经常会遇到String和Date互相转换的情况我们可以这么写
如果整个类里面有很多,可以提高date-format
如果整个配置文件所有类都需要转换,可以在提高date-format
这样就可以对整个文件所有时间类型进行转换
2,自定义转换器
上面的Date->String都是使用的dozer本身存在的转换器,我们可能需要使用一些自己自定义的转换器以满足自定义类的转换,这个时候就需要实现dozer为我们提供的接口:
然后在配置文件中可以如下写法
3,更多
上面说的基本上可以满足99%的业务需求,不过dozer还有很多奇妙的用法,可以访问dozer官网学习。
Written by xi ming You should follow him on Github