我想在DTO的单项转换之后使用专用的@AfterMapping来应用装饰,而在处理其集合转换风格时使用另一个专用的@AfterMapping而不是两者 .
public abstract CatUI convert(Cat cat);
public abstract List<CatUI> convert(List<Cat> cats);
@AfterMapping
public void populateCatName(Cat cat, @MappingTarget CatUI catUI) {
String name = _someRemoteService.getCatName(catUI.getId());
catUI.setName(name);
}
@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())));
}
我不希望在处理List转换时调用populateCatName,因此重复我的装饰 .
无论如何要做到这一点?
1 回答
使用1.1.0.Final,您将需要定义2个入口点(Mappers),其中一个带有转换列表,另一个带有转换列表 .
我建议你试试新的1.2.0.Beta2 . 有了这个,你可以使用新的
@Context
.你可以有一个像这样的界面:
和2个实现:
最后你的映射器看起来像:
然后,您需要使用上下文
SingleMappingContext
或ListMappingContext
的正确实例调用您的方法 .