如何将字符串映射到列表,并将列表映射到字符串?
考虑到我们有以下班级
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的更多示例?
我可以在这里看到一些例子: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/
不确定是否可以将不可迭代映射到Iterable。
下面的示例将PeopleTO
中的emailAddress
列表中的元素映射到People
的主EmailAddress
和次EmailAddress
属性。
MapStruct不能直接映射到集合中,但它允许您实现在映射之后运行的方法来完成该过程。我使用了这样一种方法,将PeopleTO的primaryPhone和secondaryPhone属性映射到PeopleTO中的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);
}
}
问题内容: 我想创建一个字符串映射到实例。这是正确的方法吗? 问题答案: 每当我想使用A时,我都发现切片是正确的选择,例如
我有一个字符串格式的日期列表,如下所示: 我需要以这样的方式映射它,所以我将有一个年份字符串的列表——就像这样: 我的想法是修剪字符串的开头,然后将其附加到新的年份列表中。 最有效的方法是什么?
我需要一个mapstruct映射,用于具有要以这种方式映射到目标类的对象列表的类:
...但我得到: 我不知道如何应用这些信息。首先,我认为我需要为列表声明一些额外的映射(在同一个映射器类中),所以MapStruct知道如何像这样映射列表类型的每个字段: ...但我收到错误消息
下面是我的DTO。 源DTO 目标DTO
错误: 我希望在列表中映射相同的字段名,而不需要另一个单独的方法,就像在另一个项目中使用旧的版本时一样。