我找到了这个关于使用 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")