J'utilise le mappeur suivant pour mapper des entités:
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);
}
Je dois ignorer le champ "données" uniquement pour les entités mappées en tant que collection. Mais ça ressemble à @Mapping
ne fonctionne que pour des entités uniques. J'ai également remarqué que la méthode générée assigmentFilesToAssigmentFileDTOs
utilise simplement assigmentFileToAssigmentFileDTO
dans for-loop. Y a-t-il une solution pour ça?
MapStruct utilise l'affectation qu'il peut trouver pour le mappage de collection. Pour obtenir ce que vous voulez, vous devrez définir une méthode personnalisée dans laquelle vous allez ignorer le champ data
explicitement, puis utiliser @IterableMapping(qualifiedBy)
ou - @IterableMapping(qualifiedByName)
pour sélectionner la méthode requise.
Votre mappeur devrait ressembler à:
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)
}
Tu devrais utiliser org.mapstruct.Named
et non javax.inject.Named
pour que cela fonctionne. Vous pouvez également définir votre propre annotation en utilisant org.mapstruct.Qualifier
Vous pouvez trouver plus d'informations ici dans la documentation .