【问题标题】:Mapstruct: Ignore specific field only for collection mappingMapstruct:仅针对集合映射忽略特定字段
【发布时间】:2017-08-04 20:24:26
【问题描述】:

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

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。有什么解决办法吗?

【问题讨论】:

    标签: java mapping mapstruct


    【解决方案1】:

    MapStruct 使用它可以为集合映射找到的赋值。为了达到您想要的效果,您必须定义一个自定义方法,您将在其中显式忽略data 字段,然后使用@IterableMapping(qualifiedBy)@IterableMapping(qualifiedByName) 选择所需的方法。

    您的映射器应如下所示:

    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

    【讨论】:

    • @Fillip 我也有同样的问题。我做了你上面提到的,但它根本不起作用。生成的 impl 正是在实体列表到 dto 列表映射中排除的属性所期望的。但不知道为什么会被执行。
    • 我不太了解您面临的问题。您应该提供一些您尝试过但没有奏效的示例
    猜你喜欢
    • 2020-04-24
    • 2021-11-28
    • 1970-01-01
    • 2018-03-30
    • 2020-03-07
    • 2021-04-25
    • 2018-09-06
    • 1970-01-01
    • 2016-08-15
    相关资源
    最近更新 更多