Mapstruct: игнорировать определенное поле только для сопоставления коллекции

Вопрос:Я использую следующий mapper для отображения сущностей: public interface AssigmentFileMapper { AssigmentFileDTO assigmentFileToAssigmentFileDTO(AssigmentFile assigmentFile); AssigmentFile assigmentFileDTOToAssigmentFile(AssigmentFileDTO assigmentFileDTO); @Mapping(target = "data", ignore = true) List assigmentFilesToAssigmentFileDTOs(List assigmentFiles); List assigmentFileDTOsToAssigmentFiles(List assigmentFileDTOs); } Мне нужно игнорировать поле "данные" только для объектов, которые отображаются как коллекция. Но похоже, что @Mapping работает только для отдельных объектов. Также я заметил, что

Вопрос:

Я использую следующий mapper для отображения сущностей:

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 просто использует assigmentFileToAssigmentFileDTO для for-loop. Есть ли для этого решение?

Лучший ответ:

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

Дополнительную информацию можно найти в документации.

Оцените статью
Добавить комментарий