当前位置: 首页 > 知识库问答 >
问题:

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

柯波娃
2023-03-14

我使用以下映射器映射实体:

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);
}

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

共有1个答案

邹慈
2023-03-14

MapStruct使用它可以为集合映射找到的赋值。为了实现您想要的,您必须定义一个自定义方法,其中您将明确忽略数据字段,然后使用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.命名而不是javax.inject.命名才能工作。您还可以使用org.mapstruct.限定符定义自己的注释

您可以在文档中找到更多信息。

 类似资料:
  • 有几种方法可以忽略mapstruct中未映射的目标属性。 对于特定方法,我们可以列出要忽略的所有属性: 是否有一种方法可以混合这些方法并忽略方法级别的所有属性,而无需明确列出所有属性?

  • 我需要一些使用MapStruct映射嵌套POJO的帮助。我需要跳过/删除目标类中所有子类的特定字段。 例如,以下是我的目标POJO 所有这些子类——,,。。。包含一个字段“”,我想在映射时忽略它。这种结构使得这些类不共享包含此字段的公共基类——“”。 我创建的映射器如下所示: 这工作。 然而,当中的子类数量很大时,它会变得很乏味。我需要明确指定每个类。 有没有人能告诉我,这是否可以用一种更通用的方

  • 我有以下内容: 我想忽略在RegimenEntity中设置的regimenDrugs内的所有RegimenDrugEntity对象的id。 此映射(target=“regimenDrugs.id”,ignore=true)不编译。

  • 我有以下DTO和域对象。我正在使用Mapstruct将域对象复制到DTO对象。 使用下面的映射器将域映射到DTO。我不想将电话属性从域映射到DTO。怎么做?我尝试在mapping ignore中提供嵌套目标属性,但它给出了错误:

  • 我正在使用MapStruct和在我的代码中的不同业务用例之间共享的大模型(超过50个字段)。根据入口点的不同,有些属性将被映射,有些则不被映射。当我构建我的项目时,我总是会得到“警告:未映射的目标属性”消息。 我已经研究过,并且看到可以通过使用语义命令来告诉mapstruct忽略该字段 问题是,给定我的对象具有如此多的字段,忽略每个映射器类中的每个属性将需要大量的代码。我也不想在我的日志上出现这个

  • 最后,我在我的映射类中使用了这个方法: 但这返回给我。我知道我的代码有问题,但我找不到适合我需要的有用的东西。你能帮我解决这个问题吗?