Mapstruct:仅针对集合映射忽略特定字段 [英] Mapstruct: Ignore specific field only for collection mapping

查看:1000
本文介绍了Mapstruct:仅针对集合映射忽略特定字段的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

 公共接口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 字段,然后使用

您应该使用 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆