Mapstruct 映射列表到包含列表的对象
Mapstruct map list to an object containing list
我想要从对象列表到包含列表的对象的双向映射。
class Person {
String firstName;
String lastName;
}
class Group { // Source
List<Person> people;
String groupID;
...
}
class Employee { // target
String firstName;
String lastName;
String employeeNumber;
...
}
我用ReportingPolicy.IGNORED忽略了所有不相关的字段。我只想要 Group 到 List 之间的映射,其中包含字段 firstName 和 lastName。
有可能吗?我试过了,但它在构建过程中给了我错误“不可能将可迭代映射到不可迭代。”
@Mapping(target="people", source".")
Group map(List<Employee>)
Mapstruct 不支持这种映射。有关此问题,请参阅 Mapstruct 贡献者 answer。
像解决方法一样,您可以实现自己的映射方法以转换为包装 class.
@org.mapstruct.Mapper
public interface Mapper {
List<Person> map(List<Employee> employees);
Person map(Employee employee);
default Group mapGroup(List<Employee> employees) {
Group group = new Group();
group.people = map(employees);
return group;
}
}
MapStruct 支持从源参数到目标参数的映射。这意味着您可以配置 MapStruct 以将源列表参数映射到目标列表 属性。但是,正如 中所指出的,不可能将单个集合参数映射到目标参数。它工作的唯一方法是如果有多个源参数。
例如
@Mapper
public interface Mapper {
@Mapping(target = "people", source = "employees")
@Mapping(target = "groupID", source = "groupId")
Group map(String groupId, List<Employee> employees);
}
我想要从对象列表到包含列表的对象的双向映射。
class Person {
String firstName;
String lastName;
}
class Group { // Source
List<Person> people;
String groupID;
...
}
class Employee { // target
String firstName;
String lastName;
String employeeNumber;
...
}
我用ReportingPolicy.IGNORED忽略了所有不相关的字段。我只想要 Group 到 List 之间的映射,其中包含字段 firstName 和 lastName。
有可能吗?我试过了,但它在构建过程中给了我错误“不可能将可迭代映射到不可迭代。”
@Mapping(target="people", source".")
Group map(List<Employee>)
Mapstruct 不支持这种映射。有关此问题,请参阅 Mapstruct 贡献者 answer。
像解决方法一样,您可以实现自己的映射方法以转换为包装 class.
@org.mapstruct.Mapper
public interface Mapper {
List<Person> map(List<Employee> employees);
Person map(Employee employee);
default Group mapGroup(List<Employee> employees) {
Group group = new Group();
group.people = map(employees);
return group;
}
}
MapStruct 支持从源参数到目标参数的映射。这意味着您可以配置 MapStruct 以将源列表参数映射到目标列表 属性。但是,正如
例如
@Mapper
public interface Mapper {
@Mapping(target = "people", source = "employees")
@Mapping(target = "groupID", source = "groupId")
Group map(String groupId, List<Employee> employees);
}