我试图将推土机与springboot(https://dozermapper.github.io/gitbook/documentation/springBootIntegration.html)集成在一起,但是出了点问题:
我只将依赖项放在pom.xml中
并尝试以下操作:
public class ModeloController {
private ModeloService modeloService;
private Mapper dozerBeanMapper;
@Autowired
public ModeloController(ModeloService modeloService, Mapper dozerBeanMapper) {
this.modeloService = modeloService;
this.dozerBeanMapper = dozerBeanMapper;
}
@GetMapping("/")
public List<ModeloVO> listarTodos(){
List<ModeloVO> retorno = new ArrayList<>();
List<Modelo> banco = modeloService.listarTodos();
retorno = dozerBeanMapper.map(banco, List.class);
return retorno;
}
}
在Modelo类中,我有3个道具ID,名称和Modelo,在ModeloVo中我只有2个道具ID和名称,
推土机在Modelo.class的ArrayList中而不是仅具有2个字段的ModeloVO列表中转换我的内容
答案 0 :(得分:0)
在您的示例中对Dozer的调用是将List(第一个参数)的实例映射到新的List.class(第二个参数)。 Dozer会按照指示进行操作,并将List映射到具有所有相同元素的新List实例。 如果您要调用Dozer的map方法,并且第一个参数是单个Modelo实例,第二个参数是ModeloVo.class,则它将映射单个实例。 最后我检查了一下,Dozer没有很好的工具来映射任意集合。我可以考虑(并已利用)两种方法来完成此任务: 1)遍历源列表banco,在每个Modelo对象上调用Dozer的map方法,并将生成的ModeloVO对象添加到实例化的新List中。 2)为每个包装器类创建一对包装器类,并提供到Dozer的映射,该映射器提供源类型和目标类型的提示。
第一个选项带有一些开销,因为每次打入Dozer都需要额外的处理。从处理的角度来看,第二个选项更有效,如果List很大并且在循环中调用Dozer会降低性能,则第二个选项可能是更好的选择。