如何使用 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.
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.