Mapstruct:仅对集合映射忽略特定字段

时间:2017-03-14 13:14:51

标签: java mapping mapstruct

我正在使用以下映射器来映射实体:

public interface AssigmentFileMapper {

AssigmentFileDTO assigmentFileToAssigmentFileDTO(AssigmentFile assigmentFile);

AssigmentFile assigmentFileDTOToAssigmentFile(AssigmentFileDTO assigmentFileDTO);

@Mapping(target = "data", ignore = true)
List<AssigmentFileDTO> assigmentFilesToAssigmentFileDTOs(List<AssigmentFile> assigmentFiles);

List<AssigmentFile> assigmentFileDTOsToAssigmentFiles(List<AssigmentFileDTO> assigmentFileDTOs);
}

我只需要忽略映射为集合的实体的“数据”字段。 但看起来@Mapping仅适用于单个实体。另外我注意到生成的方法assigmentFilesToAssigmentFileDTOs只在for循环中使用assigmentFileToAssigmentFileDTO。那有什么解决方案吗?

1 个答案:

答案 0 :(得分:13)

MapStruct使用它可以为集合映射找到的赋值。为了实现您的目标,您必须定义一个自定义方法,您将明确忽略data字段,然后使用@IterableMapping(qualifiedBy)@IterableMapping(qualifiedByName)来选择所需的方法。< / p>

您的映射器应如下所示:

public interface AssigmentFileMapper {

    AssigmentFileDTO assigmentFileToAssigmentFileDTO(AssigmentFile assigmentFile);

    AssigmentFile assigmentFileDTOToAssigmentFile(AssigmentFileDTO assigmentFileDTO);

    @IterableMapping(qualifiedByName="mapWithoutData")
    List<AssigmentFileDTO> assigmentFilesToAssigmentFileDTOs(List<AssigmentFile> assigmentFiles);

    List<AssigmentFile> assigmentFileDTOsToAssigmentFiles(List<AssigmentFileDTO> assigmentFileDTOs);

    @Named("mapWithoutData")
    @Mapping(target = "data", ignore = true)
    AssignmentFileDto mapWithouData(AssignmentFile source)

}

您应该使用org.mapstruct.Named而不是javax.inject.Named来实现此目的。您还可以使用org.mapstruct.Qualifier

定义自己的注释

您可以找到更多信息here in the documentation