使用1.1.0.Final,您将需要定义2个入口点(Mappers),其中一个带有转换列表,另一个带有转换列表 .
我建议你试试新的1.2.0.Beta2 . 有了这个,你可以使用新的 @Context .
你可以有一个像这样的界面:
public interface CatMappingContext {
@AfterMapping
public default void populateCatName(Cat cat, @MappingTarget CatUI catUI) {
//nothing per default
}
@AfterMapping
public void populateCatNames(List cats, @MappingTarget List catUIs) {
//nothing per default
}
}
和2个实现:
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 cats, @MappingTarget List catUIs) {
Map idToNameMap = _someRemoteService.getCatNames(catUIs.stream().map((c) -> c.getId() ).collect(Collectors.toList());
catUIs.forEach((c) -> c.setName(idToNameMap(c.getId())));
}
}
最后你的映射器看起来像:
public interface CatMapper {
public CatUI convert(Cat cat, @Context CatMappingContext context);
public List convert(List cats, @Context CatMappingContext context);
}
然后,您需要使用上下文 SingleMappingContext 或 ListMappingContext 的正确实例调用您的方法 .