mapstruct 将方法应用于列表中的所有对象
mapstruct apply method to all objects from a list
我的问题:我想使用 mapstruct
将 PersonB
类型的 class 映射到 PersonA
并映射到 trim 所有找到的字符串在 List<Address> addresses
.
public class PersonA {
List<Address> addresses;
}
public class PersonB {
List<Address> addresses;
}
public Address {
String name;
}
@Mapper
public interface PersonMapper {
@Mapping(target = "addresses.name", qualifiedByName = "trim")
public PersonA mapToPersonA(final PersonB person);
@Named("trim")
public static String trim(final String value) {
return value != null ? value.trim() : null;
}
}
我的结构有点复杂,但我试着总结一下。我不知道为什么这个映射器没有按预期工作以及为什么字符串不是 trimmed.
目前 MapStruct 不允许为集合定义嵌套目标映射。
此外,您的 PersonA
和 PersonB
的 Address
类型相同。这意味着 MapStruct 不会创建对象的副本,而是通过引用来复制它。
要解决第一个问题,您需要定义一个显式方法来映射 Address
例如
@Mapper
public interface PersonMapper {
PersonA mapToPersonA(final PersonB person);
@Mapping(target = "name", qualifiedByName = "trim")
Address cloneAddress(Address address);
@Named("trim")
public static String trim(final String value) {
return value != null ? value.trim() : null;
}
}
这也将解决第二个问题,因为 MapStruct 将使用特定方法来映射地址。
我的问题:我想使用 mapstruct
将 PersonB
类型的 class 映射到 PersonA
并映射到 trim 所有找到的字符串在 List<Address> addresses
.
public class PersonA {
List<Address> addresses;
}
public class PersonB {
List<Address> addresses;
}
public Address {
String name;
}
@Mapper
public interface PersonMapper {
@Mapping(target = "addresses.name", qualifiedByName = "trim")
public PersonA mapToPersonA(final PersonB person);
@Named("trim")
public static String trim(final String value) {
return value != null ? value.trim() : null;
}
}
我的结构有点复杂,但我试着总结一下。我不知道为什么这个映射器没有按预期工作以及为什么字符串不是 trimmed.
目前 MapStruct 不允许为集合定义嵌套目标映射。
此外,您的 PersonA
和 PersonB
的 Address
类型相同。这意味着 MapStruct 不会创建对象的副本,而是通过引用来复制它。
要解决第一个问题,您需要定义一个显式方法来映射 Address
例如
@Mapper
public interface PersonMapper {
PersonA mapToPersonA(final PersonB person);
@Mapping(target = "name", qualifiedByName = "trim")
Address cloneAddress(Address address);
@Named("trim")
public static String trim(final String value) {
return value != null ? value.trim() : null;
}
}
这也将解决第二个问题,因为 MapStruct 将使用特定方法来映射地址。