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.4mapstruct 以上的你可以这样做:

@Mapping(target = ".", source = "person")
PersonDTO personBLOToPersonDTO(PersonBLO personBLO);

它将尝试将 person 的所有字段映射到当前目标。