Mapstruct:仅针对集合映射忽略特定字段 [英] Mapstruct: Ignore specific field only for collection mapping
问题描述
我正在使用以下映射器来映射实体:
公共接口AssigmentFileMapper {AssigmentFileDTO assigmentFileToAssigmentFileDTO(AssigmentFile assigmentFile);AssigmentFile assigmentFileDTOToAssigmentFile(AssigmentFileDTO assigmentFileDTO);@Mapping(target ="data",ignore = true)列表< AssigmentFileDTO>assigmentFilesToAssigmentFileDTOs(List< AssigmentFile> assigmentFiles);列表< AssigmentFile>assigmentFileDTOsToAssigmentFiles(List< AssigmentFileDTO> assigmentFileDTOs);}
我只需要忽略映射为集合的实体的数据"字段.但是看起来 @Mapping
仅适用于单个实体.我也注意到生成的方法 assigmentFilesToAssigmentFileDTOs
在for循环中仅使用 assigmentFileToAssigmentFileDTO
.有什么解决办法吗?
MapStruct使用它可以为集合映射找到的分配.为了实现所需的功能,您将必须定义一个自定义方法,在该方法中,您将显式忽略 data
字段,然后使用 @IterableMapping(qualifiedByName)
来选择所需的方法.>
您的映射器应如下所示:
公共接口AssigmentFileMapper {AssigmentFileDTO assigmentFileToAssigmentFileDTO(AssigmentFile assigmentFile);AssigmentFile assigmentFileDTOToAssigmentFile(AssigmentFileDTO assigmentFileDTO);@IterableMapping(qualifiedByName="mapWithoutData")列表< AssigmentFileDTO>assigmentFilesToAssigmentFileDTOs(List< AssigmentFile> assigmentFiles);列表< AssigmentFile>assigmentFileDTOsToAssigmentFiles(List< AssigmentFileDTO> assigmentFileDTOs);@Named("mapWithoutData")@Mapping(target ="data",忽略= true)AssignmentFileDto mapWithouData(AssignmentFile源)}
您应该使用 org.mapstruct.Named
,而不是 javax.inject.Named
才能正常工作.您还可以使用 org.mapstruct.Qualifier定义自己的注释
您可以在文档的此处找到更多信息.
I am using following mapper to map entities:
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);
}
I need to ignore the "data" field only for entities that mapped as collection.
But it looks like @Mapping
works only for single entities. Also I've noticed that generated method assigmentFilesToAssigmentFileDTOs
just uses assigmentFileToAssigmentFileDTO
in for-loop. Is there any solution for that?
MapStruct uses the assignment that it can find for the collection mapping. In order to achieve what you want you will have to define a custom method where you are going to ignore the data
field explicitly and then use @IterableMapping(qualifiedBy)
or @IterableMapping(qualifiedByName)
to select the required method.
Your mapper should look like:
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)
}
You should use org.mapstruct.Named
and not javax.inject.Named
for this to work. You can also define your own annotation by using org.mapstruct.Qualifier
You can find more information here in the documentation.
这篇关于Mapstruct:仅针对集合映射忽略特定字段的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!