Qualifier を使用した Iterable から Non-Iterable へのマッピングに関するこの例を見つけました。
https://github.com/mapstruct/mapstruct-examples/tree/master/mapstruct-iterable-to-non-iterable
しかし、このマッピングでネストされたプロパティをマップできるようにするにはどうすればよいでしょうか (ドット アノテーションを使用)。
たとえば、ソース オブジェクトのコレクションの最初の要素のフィールド xyz をターゲット オブジェクトのプレーン フィールドにマッピングしますか?
この例では修飾子を定義しています
@Qualifier
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.SOURCE)
public @interface FirstElement {
}
次にカスタムマッパーを定義します
public class MapperUtils {
@FirstElement
public <T> T first(List<T> in) {
if (in != null && !in.isEmpty()) {
return in.get(0);
}
else {
return null;
}
}
}
最後に、マッピングは次のように定義されます。
@Mapping(target = "emailaddress", source = "emails", qualifiedBy = FirstElement.class )
しかし、メール コレクションの最初の要素から特定のフィールドを抽出したい場合、たとえば、コードで行ったようにemails.get(0).getEmailAddress
?
たとえば、次のようなマッピングを書くことを期待しています:
@Mapping(target = "emailaddress", source = "emails[0].emailAddress")