Mapstruct:仅针对集合映射忽略特定字段
Mapstruct: Ignore specific field only for collection mapping
我正在使用以下映射器来映射实体:
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);
}
我只需要忽略映射为集合的实体的 "data" 字段。
但看起来 @Mapping
仅适用于单个实体。我还注意到生成的方法 assigmentFilesToAssigmentFileDTOs
只是在 for 循环中使用 assigmentFileToAssigmentFileDTO
。有什么解决办法吗?
MapStruct 使用它可以为集合映射找到的分配。为了实现您想要的效果,您必须定义一个自定义方法,您将在其中显式忽略 data
字段,然后使用 @IterableMapping(qualifiedBy)
or @IterableMapping(qualifiedByName)
到 select 所需的方法。
您的映射器应如下所示:
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
and not javax.inject.Named
for this to work. You can also define your own annotation by using org.mapstruct.Qualifier
您可以找到更多信息here in the documentation。
我正在使用以下映射器来映射实体:
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);
}
我只需要忽略映射为集合的实体的 "data" 字段。
但看起来 @Mapping
仅适用于单个实体。我还注意到生成的方法 assigmentFilesToAssigmentFileDTOs
只是在 for 循环中使用 assigmentFileToAssigmentFileDTO
。有什么解决办法吗?
MapStruct 使用它可以为集合映射找到的分配。为了实现您想要的效果,您必须定义一个自定义方法,您将在其中显式忽略 data
字段,然后使用 @IterableMapping(qualifiedBy)
or @IterableMapping(qualifiedByName)
到 select 所需的方法。
您的映射器应如下所示:
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
and not javax.inject.Named
for this to work. You can also define your own annotation by using org.mapstruct.Qualifier
您可以找到更多信息here in the documentation。