2017-02-10 406 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,因爲它更清潔(在我看來)