MapStruct String to List映射
如何将String映射到List和List to String?
考虑一下我们跟随classess
class People{ private String primaryEmailAddress; private String secondaryEmailAddress; private List phones; //getter and setters } class PeopleTO{ private List emailAddress; private String primaryPhone; private String secondaryPhone; //getter and setters }
在Dozer和Orika中,我们可以使用以下代码行轻松映射
fields("primaryEmailAddress", "emailAddress[0]") fields("secondaryEmailAddress", "emailAddress[1]") fields("phones[0]", "primaryPhone") fields("phones[1]", "secondaryPhone")
我如何在MapStruct中进行相同类型的映射? 我会在哪里找到有关mapstruct的更多示例?
下面的示例将PeopleTO
emailAddress
列表中的元素映射到PeopleTO
的primaryEmailAddress
和secondaryEmailAddress
属性。
MapStruct无法直接映射到集合,但它允许您实现在映射之后运行的方法以完成该过程。 我使用了一种这样的方法将PeopleTO
和secondaryPhone
属性PeopleTO
到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()); people.getPhones().add(to.primaryPhone); people.getPhones().add(to.secondaryPhone); } }
我可以在这里看到一些例子: https : //github.com/mapstruct/mapstruct-examples
检查此模块是否符合您的特定要求(可转换为非Iterable): https : //github.com/mapstruct/mapstruct-examples/tree/master/mapstruct-iterable-to-non-iterable
另一个在这里: http : //blog.goyello.com/2015/09/08/dont-get-lost-take-the-map-dto-survival-code/
不确定是否可以将非迭代映射到Iterable。