MapStruct:将嵌套对象属性映射到属性
MapStruct: map nested object properties to properties
假设我有以下对象:
class Person {
String firstName;
String lastName;
}
class PersonBLO {
Person person;
Integer foo; // Some calculated business property
}
class PersonDTO {
String firstName;
String lastName;
Integer foo;
}
我发现自己正在编写以下映射器:
@Mapping(target = "firstName", source = "person.firstName")
@Mapping(target = "lastName", source = "person.lastName")
PersonDTO personBLOToPersonDTO(PersonBLO personBLO);
是否可以自动将所有 person.*
属性映射到相应的 *
属性?
目前无法使用通配符。
不过,您可以做的是提供一种自定义方法,它只会调用正确的方法。例如:
@Mapper
public interface MyMapper {
default PersonDTO personBLOToPersonDTO(PersonBLO personBLO) {
if (personBLO == null) {
return null;
}
PersonDTO dto = personToPersonDTO(personBlo.getPerson());
// the rest of the mapping
return dto;
}
PersonDTO personToPersonDTO(PersonBLO source);
}
现在,with version 1.4 及 mapstruct
以上的你可以这样做:
@Mapping(target = ".", source = "person")
PersonDTO personBLOToPersonDTO(PersonBLO personBLO);
它将尝试将 person
的所有字段映射到当前目标。
假设我有以下对象:
class Person {
String firstName;
String lastName;
}
class PersonBLO {
Person person;
Integer foo; // Some calculated business property
}
class PersonDTO {
String firstName;
String lastName;
Integer foo;
}
我发现自己正在编写以下映射器:
@Mapping(target = "firstName", source = "person.firstName")
@Mapping(target = "lastName", source = "person.lastName")
PersonDTO personBLOToPersonDTO(PersonBLO personBLO);
是否可以自动将所有 person.*
属性映射到相应的 *
属性?
目前无法使用通配符。
不过,您可以做的是提供一种自定义方法,它只会调用正确的方法。例如:
@Mapper
public interface MyMapper {
default PersonDTO personBLOToPersonDTO(PersonBLO personBLO) {
if (personBLO == null) {
return null;
}
PersonDTO dto = personToPersonDTO(personBlo.getPerson());
// the rest of the mapping
return dto;
}
PersonDTO personToPersonDTO(PersonBLO source);
}
现在,with version 1.4 及 mapstruct
以上的你可以这样做:
@Mapping(target = ".", source = "person")
PersonDTO personBLOToPersonDTO(PersonBLO personBLO);
它将尝试将 person
的所有字段映射到当前目标。