在将集合映射到多个源对象(它适用于单个源对象)时,MapStruct会遇到一个奇怪的问题。
@Mapper
public interface MyMapper {
public MyVO mapEntityToVO(MyEntity entity); // WORKS
public ArrayList<MyVO> mapEntityListToVOList(List<MyEntity> entities); // WORKS
public MyVO mapEntityToVO(MyEntity entity, MySecondSource source); // WORKS
public ArrayList<MyVO> mapEntityListToVOList(List<MyEntity> entities, MySecondSource source); // DOESN'T WORK (it produces empty list)
}
实施地图绘制程序的产出如下:
public class MyMapperImpl implements MyMapper {
[...]
@Override
public ArrayList<MyVO> mapEntityListToVOList(List<MyEntity> entities) {
if ( entities == null ) {
return null;
}
ArrayList<MyVO> list = new ArrayList<MyVO>( entity.size() );
for ( MyEntity entity : entities ) {
list.add( mapEntityToVO ( entity ) );
}
return list;
}
[...]
@Override
public ArrayList<MyVO> mapEntityListToVOList(List<MyEntity> entities, MySecondSource source) {
if ( entities == null && source == null) {
return null;
}
ArrayList<MyVO> arrayList = new ArrayList<MyVO>();
return arrayList;
}
}
如您所见,列表中没有填充多个源。有正确的方法让它起作用吗?
发布于 2022-10-26 17:03:28
如果要将附加参数传递给其他映射方法,则应该使用@Context
对其进行注释。注释是在1.2版中引入的,更多信息可以在MapStruct文档中找到。
您的方法应声明为:
public ArrayList<MyVO> mapEntityListToVOList(List<MyEntity> entities, @Context MySecondSource source);
此外,应该添加一个代理方法来将MapStruct指向正确的单个对象映射方法。
default MyVO mapContext(MyEntity entity, @Context MySecondSource source) {
return mapEntityToVO(entity, source);
}
如果没有代理方法,MapStruct将生成一个用于映射单个对象的新方法,因为现有的对象不包含标记为@Context
的第二个参数。
https://stackoverflow.com/questions/74152095
复制相似问题