2017-02-10 408 views
0

如何从两个不同的字段映射?我需要设置b.url为a.x.y.z.url,否则对a.k.l.m.url存在:mapstruct:从两个不同的字段映射

b.url = exists(a.x.y.z.url)? a.x.y.z.url:是否存在(a.k.l.m.url)? aklmurl:默认值

表达可能有帮助,但是这将是相当长的表达式,如果我检查所有嵌套字段为空,像“一个= NULL & & a.getX()= NULL & & a.getX()! .getY()!= null & & a.getX()。getY()。getZ()!= null & & a.getX()。getY()。getZ()。getURL()!= null?a。 。的getX()的getY()GETZ()的getURL():......”

感谢, 帕维尔

回答

0

您可以使用MapStruct @AfterMapping获得对映射对象的访问权限。

@AfterMapping 
protected void mapUrl(B b, @MappingTarget A a) { 
    //You will do your logic here 
} 

理论上你可以通过声明你映射器作为一个抽象类,并限定getUrl(A a)方法通过表达做到这一点。他们在你的表情中可以拨打getUrl(a)

我会建议使用@AfterMapping,因为它更清洁(在我看来)