繁体   English   中英

MapStruct 字符串到列表映射

[英]MapStruct String to List mapping

我如何将字符串映射到列表和列表到字符串?

考虑我们有以下类

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
}

在 Dozer 和 Orika 中,我们可以使用以下代码行轻松映射

fields("primaryEmailAddress", "emailAddress[0]")
fields("secondaryEmailAddress", "emailAddress[1]")

fields("phones[0]", "primaryPhone")
fields("phones[1]", "secondaryPhone")

我如何在 MapStruct 中进行相同类型的映射? 我在哪里可以找到有关 mapstruct 的更多示例?

下面从图元素的示例emailAddress列表中PeopleTOprimaryEmailAddresssecondaryEmailAddress的性质People

MapStruct 不能直接映射到集合中,但它允许您实现在映射后运行的方法以完成该过程。 我已经用于映射一个这样的方法primaryPhonesecondaryPhone的性质PeopleTO到的元素phones列表中People

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);
    }
}

我可以在这里看到一些例子: https : //github.com/mapstruct/mapstruct-examples

根据您的特定要求(可迭代到不可迭代)查看此模块: 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/

不确定是否可以将不可迭代映射到可迭代。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM