我理解Mapstruct
允许我定义自己的映射器逻辑,我这样做:
@Mapper(componentModel = "spring")
public abstract class ProjectMapper {
public ProjectInfo map(ProjectEntity projectEntity) {
ProjectInfo projectInfo = new ProjectInfo();
projectInfo.setName(projectEntity.getName());
projectInfo.setDescription(projectEntity.getDescription());
// Specific logic that forces me to define it myself
if (projectEntity.getId() != null) {
projectInfo.setId(projectEntity.getId());
}
if (projectEntity.getOrganisation() != null) {
projectInfo.setOrganisation(projectEntity.getOrganisation().getName());
}
return projectInfo;
}
}
它工作正常,但我也想要Mapstruct
生成的映射器,但是它们必须在接口中定义,有没有办法对这两种映射器类型进行分组?
答案 0 :(得分:0)
注意:未经测试。我在使用MapStruct版本1.0.0.Final的Spring-Boot项目中使用了以下解决方案一次。
自定义标准映射过程为fairly well documented。
自定义映射的方法之一是'AfterMapping' and 'BeforeMapping' hooks:
@Mapper
public abstract class ProjectMapperExtension {
@AfterMapping
public void mapProjectEntityToProjectInfo(ProjectEntity projectEntity, @MappingTarget ProjectInfo projectInfo) {
if (projectEntity.getId() != null) {
projectInfo.setId(projectEntity.getId());
}
if (projectEntity.getOrganisation() != null) {
projectInfo.setOrganisation(projectEntity.getOrganisation().getName());
}
}
}
然后使用uses
注释标准映射器接口,并从标准映射中排除自定义映射字段:
@Mapper(componentModel = "spring", uses = {ProjectMapperExtension.class})
public interface ProjectMapper {
@Mapping(target = "id", ignore = true)
@Mapping(target = "organisation", ignore = true)
ProjectInfo mapProjectEntityToProjectInfo(ProjectEntity projectEntity);
}