如何使用 MapStruct 只能映射指定的字段?

How can only specified fields be mapped using MapStruct?

MapStruct 默认映射源和目标的所有属性(如果它们具有相同的名称)。 @Mapping 中的 ignore 元素可用于省略任何字段映射。但这不是我想要的。我想控制映射策略。我想指定如下内容:

@Mapper(STRATEGY=MAPPING_STRATEGY.SPECIFIED)
public interface EmployeeToEmployeeDTOMapper {
        @Mappings({
                   @Mapping(target="id", source="id"),
                   @Mapping(target="name", source="name")
                 })
        public EmployeeDTO employeeToEmployeeDTO (Employee emp);
}

现在这个映射只是为了将 id 和 name 从源映射到目标。除非在映射注释中指定,否则不应映射其他字段。

您要查找的是 #1392 中的功能请求。有一个待处理的 PR,所以它可以在下一个版本 (1.3.0) 中使用。最后的API还没有定义。关注问题和 PR 以在完成时得到通知

从 MapStruct 1.3 开始,可以将 @BeanMapping(ignoreByDefault = true) 注释添加到映射方法以实现此结果:

public interface EmployeeToEmployeeDTOMapper {
    @BeanMapping(ignoreByDefault = true)
    @Mapping(target="id", source="id")
    @Mapping(target="name", source="name")
    EmployeeDTO employeeToEmployeeDTO(Employee emp);
}

根据 ignoreByDefault 注释元素的 the Javadocs

Default ignore all mappings. All mappings have to be defined manually. No automatic mapping will take place. No warning will be issued on missing target properties.