Mit 1.1.0.Final müssen Sie 2 Eingangspunkte (Mapper) definieren, eine mit der Konvertierung in der Liste und die andere ohne sie.
Ich würde vorschlagen, dass Sie die neue 1.2.0.Beta2 ausprobieren. Mit diesem können Sie das neue @Context
verwenden.
Sie eine Schnittstelle wie haben:
public interface CatMappingContext {
@AfterMapping
public default void populateCatName(Cat cat, @MappingTarget CatUI catUI) {
//nothing per default
}
@AfterMapping
public void populateCatNames(List<Cat> cats, @MappingTarget List<CatUI> catUIs) {
//nothing per default
}
}
und 2 Ausführungen:
public interface CatMapper {
public CatUI convert(Cat cat, @Context CatMappingContext context);
public List<CatUI> convert(List<Cat> cats, @Context CatMappingContext context);
}
Sie werden dann anrufen müssen:
public class SingleMappingContext implements CatMappingContext {
@AfterMapping
public void populateCatName(Cat cat, @MappingTarget CatUI catUI) {
String name = _someRemoteService.getCatName(catUI.getId());
catUI.setName(name);
}
}
public class ListMappingContext implements CatMappingContext {
@AfterMapping
public void populateCatNames(List<Cat> cats, @MappingTarget List<CatUI> catUIs) {
Map<Integer,String> idToNameMap = _someRemoteService.getCatNames(catUIs.stream().map((c) -> c.getId()).collect(Collectors.toList());
catUIs.forEach((c) -> c.setName(idToNameMap(c.getId())));
}
}
Schließlich Ihr Mapper aussehen kann Methoden mit der richtigen Instanz des Kontexts SingleMappingContext
oder der ListMappingContext
.