阅读 403

Orika的高级映射配置和自定义转换器

高级映射配置

空值映射

进行AB对象转换时,对于空值字段的处理,选择映射还是忽略根据场景的不同而不同。默认情况下orika 框架选择的策略是忽略

ClassMap 级别

可以在ClassMap级别设置是否映射空值,例如下面在field1fieldOne 转换前将其设置为“映射空值”,转换后再设置为“忽略空值”

mapperFactory.classMap(BasicPerson.class, BasicPersonDto.class)    // 设置为映射空值    .mapNulls(true).mapNullsInReverse(true)    .field("field1", "fieldOne")    // 设置为忽略空值    .mapNulls(false).mapNullsInReverse(false)    .field("field2", "fieldTwo")    .byDefault()    .register(); 复制代码

FieldMap 级别

FieldMap级别设置空值则使用fieldMap方法,指定某些字段的转换是“赋值”还是“忽略”。

mapperFactory.classMap(BasicPerson.class, BasicPersonDto.class)    .mapNulls(false).mapNullsInReverse(false)    .fieldMap("field1", "fieldOne").mapNulls(true).mapNullsInReverse(true).add()    .field("field2", "fieldTwo")    .byDefault()    .register(); 复制代码

自定义单个 ClassMaps

使用 orika 框架提供的customize()方法可以自定义由AB对象的转换方法

mapperFactory.classMap(Source.class, Destination.class)     .customize(     new CustomMapper<Source, Destination>() {       @Override       public void mapAtoB(Source source, Destination dest,           MappingContext context) {         super.mapAtoB(source, dest, context);       }       @Override       public void mapBtoA(Destination approvalEntry, Source source,           MappingContext context) {         super.mapBtoA(dest, source, context);       }     }).register(); 复制代码

自定义转换器

Orika 框架支持注册自定义的转换器,支持在全局注册和字段级别的注册,例如我们定义一个如下的转换器,用于从DateTime转换到Date

public class JodaTimeToDateConverter extends CustomConverter<DateTime, Date> {   @Override   public Date convert(DateTime source, Type<? extends Date> destinationType,       MappingContext mappingContext) {     return source.toDate();   } } 复制代码

定义完转换器后支持在全局注册,如下面代码所示,应用到所有DateTime类型字段到Date类型字段应用转换器。

mapperFactory.getConverterFactory().registerConverter(new JodaTimeToDateConverter()); 复制代码

也可以在字段级别注册,如下面代码所示,仅对createTime字段应用转换器。

mapperFactory.getConverterFactory().registerConverter("createTime", new JodaTimeToDateConverter()); 复制代码

另外上述仅支持了DateTime转换到Date,可以继承BidirectionalConverter类以完成两个类型的双向转换,如下面代码所示

public class JodaTimeToDateConverter extends BidirectionalConverter<DateTime, Date> {   @Override   public Date convertTo(DateTime source, Type<Date> destinationType,       MappingContext mappingContext) {     return source.toDate();   }   @Override   public DateTime convertFrom(Date source, Type<DateTime> destinationType,       MappingContext mappingContext) {     return new DateTime(source);   } }


作者:小岛秀夫
链接:https://juejin.cn/post/7032886752528302087


文章分类
代码人生
文章标签
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐