如何使用mapStruct仅映射指定的字段?

Nav*_*een 5 java-8 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);
}
Run Code Online (Sandbox Code Playgroud)

现在此映射仅用于将ID和名称从源映射到目标。除非在映射注释中指定,否则不应映射其他字段。

M. *_*tin 11

从 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);
}
Run Code Online (Sandbox Code Playgroud)

根据注释元素的JavadocignoreByDefault

默认忽略所有映射。所有映射都必须手动定义。不会进行自动映射。对于缺失的目标属性,不会发出警告。


Fil*_*lip 5

您正在寻找的是#1392 中的功能请求。有一个悬而未决的 PR,因此可以在下一个版本 (1.3.0) 中使用。最终的 API 尚未定义。按照问题和 PR 在完成时得到通知

  • 仅通过显式使用`@Mapping(target = "foo", ignore = true)` (2认同)