我认为您可以在 Dozer 中使用提示 http://dozer.sourceforge.net/documentation/collectionandarraymapping.html 实现此目的,但我们发现围绕默认 Mapper 创建包装器更容易。下面是一个例子。然后,您可以只依赖您定义的默认客户转换器/映射器来进行映射。
CollectionMapperDecorator custom = new CollectionMapperDecorator(dozerMapper);
Collection<B> bees = custom.mapCollection(ayes, B.class);
public class CollectionMapperDecorator implements Mapper
{
private Mapper baseMapper;
public CollectionMapperDecorator(Mapper baseMapper)
{
this.baseMapper = baseMapper;
}
public <T> Collection<T> mapCollection(Object[] source, Class<T> destinationClass)
{
return mapCollection(Arrays.asList(source), destinationClass);
}
public <T> Collection<T> mapCollection(Object[] source, Collection<T> destination, Class<T> destinationClass)
{
return mapCollection(Arrays.asList(source), destination, destinationClass);
}
public <T> Collection<T> mapCollection(Collection<? extends Object> source, Class<T> destinationClass)
{
return mapCollection(source, null, destinationClass);
}
public <T> Collection<T> mapCollection(Collection<? extends Object> source, Collection<T> destination, Class<T> destinationClass)
{
if(destination == null)
destination = new ArrayList<T>();
for(Object sourceObj : source)
{
destination.add(map(sourceObj, destinationClass));
}
return destination;
}
public <T> T map(Object source, Class<T> destinationClass, String mapId) throws MappingException
{
return baseMapper.map(source, destinationClass, mapId);
}
public <T> T map(Object source, Class<T> destinationClass) throws MappingException
{
return baseMapper.map(source, destinationClass);
}
public void map(Object source, Object destination, String mapId) throws MappingException
{
baseMapper.map(source, destination, mapId);
}
public void map(Object source, Object destination) throws MappingException
{
baseMapper.map(source, destination);
}
}