Java MapStruct字符串到列表映射
如何将字符串映射到列表,并将列表映射到字符串 假设我们有下面的班级Java MapStruct字符串到列表映射,java,mapping,mapstruct,Java,Mapping,Mapstruct,如何将字符串映射到列表,并将列表映射到字符串 假设我们有下面的班级 class People{ private String primaryEmailAddress; private String secondaryEmailAddress; private List<String> phones; //getter and setters } class PeopleTO{ private List<String> emailA
class People{
private String primaryEmailAddress;
private String secondaryEmailAddress;
private List<String> phones;
//getter and setters
}
class PeopleTO{
private List<String> emailAddress;
private String primaryPhone;
private String secondaryPhone;
//getter and setters
}
如何在MapStruct中执行相同类型的映射?在哪里可以找到有关mapstruct的更多示例?我可以在这里看到一些示例: 根据您的具体需求检查本模块(可测试到不可测试): 这里还有一个:
不确定是否可以将不可iterable映射到可iterable。下面的示例将
PeopleTO
中的emailAddress
列表中的元素映射到primarydemailaddress
和secondarydemailaddress
的属性中
MapStruct不能直接映射到集合中,但它允许您实现在映射后运行的方法来完成该过程。我使用了这样一种方法将PeopleTO
的primaryPhone
和secondaryPhone
属性映射到People
中的phones
列表的元素中
abstract class Mapper {
@Mappings({
@Mapping(target="primaryEmailAddress", expression="emailAddress != null && emailAdress.size() >= 1 ? emailAdresses.get(0) : null"),
@Mapping(target="secondaryEmailAddress", expression="emailAddress != null && emailAdress.size() >= 2 ? emailAdresses.get(1) : null"),
@Mapping(target="phones", ignore=true)
})
protected abstract People getPeople(PeopleTO to);
@AfterMapping
protected void setPhones(PeopleTO to, @MappingTarget People people) {
people.setPhones(new List<String>());
people.getPhones().add(to.primaryPhone);
people.getPhones().add(to.secondaryPhone);
}
}
抽象类映射器{
@映射({
@映射(target=“primaryEmailAddress”,expression=“emailAddress!=null&&emailAddress.size()>=1?EmailAddresss.get(0):null”),
@映射(target=“secondaryEmailAddress”,expression=“emailAddress!=null&&emailAddress.size()>=2?EmailAddresss.get(1):null”),
@映射(target=“phones”,ignore=true)
})
受保护的抽象人物getPeople(PeopleTO);
@后映射
受保护的无效设置电话(PeopleTO、@MappingTarget People){
people.setPhones(新列表());
people.getPhone().add(到.primaryPhone);
people.getPhone().add(到.secondaryPhone);
}
}
一个字符串映射到列表是可行的,但我想将主要和次要电子邮件地址映射到电子邮件地址列表,当我这样做时,它会抛出无法映射的相同字段
abstract class Mapper {
@Mappings({
@Mapping(target="primaryEmailAddress", expression="emailAddress != null && emailAdress.size() >= 1 ? emailAdresses.get(0) : null"),
@Mapping(target="secondaryEmailAddress", expression="emailAddress != null && emailAdress.size() >= 2 ? emailAdresses.get(1) : null"),
@Mapping(target="phones", ignore=true)
})
protected abstract People getPeople(PeopleTO to);
@AfterMapping
protected void setPhones(PeopleTO to, @MappingTarget People people) {
people.setPhones(new List<String>());
people.getPhones().add(to.primaryPhone);
people.getPhones().add(to.secondaryPhone);
}
}