文字列をリストに、リストを文字列にマッピングするにはどうすればよいですか?
次のクラスがあるとします
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
のPeopleTO
リストの要素を、primaryEmailAddress
のsecondaryEmailAddress
およびPeople
プロパティにマッピングします。
MapStructを直接コレクションにマップすることはできませんが、マッピング後に実行するメソッドを実装してプロセスを完了することができます。 primaryPhone
のsecondaryPhone
プロパティとPeopleTO
プロパティをphones
のPeople
リストの要素にマッピングするために、そのような方法の1つを使用しました。
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
特定の要件(IterableからNon-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をIterableにマッピングできるかどうかは不明です。