【问题标题】:How use Dozer with springboot?推土机如何与弹簧靴一起使用?
【发布时间】:2019-07-16 22:29:59
【问题描述】:

我试图将推土机与 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、name 和 modelo,而在我的 ModeloVo 中,我只有 2 个道具 Id 和 name,

推土机将我的 retorno 转换为 Modelo.class 的 ArrayList 而不是只有 2 个字段的 ModeloVO 列表

【问题讨论】:

    标签: spring-boot dozer


    【解决方案1】:

    在您的示例中对 Dozer 的调用是将 List 的实例(第一个参数)映射到新的 List.class(第二个参数)。 Dozer 正在按照指示进行操作,并将 List 映射到具有所有相同元素的新 List 实例。 如果您要调用 Dozer 的 map 方法,第一个参数是单个 Modelo 实例,第二个参数是 ModeloVo.class,它将映射单个实例。 最后我检查了一下,Dozer 没有很好的工具来映射任意集合。我可以想到(并且已经使用)两种方法来实现这一点: 1)循环遍历源List,banco,在每个Modelo对象上调用Dozer的map方法,并将生成的ModeloVO对象添加到你已经实例化的新List中。 2) 为每个包装类创建一对,并提供到 Dozer 的映射,该映射提供源类型和目标类型的提示。

    第一个选项会带来一些开销,因为每次调用 Dozer 都需要一些额外的处理。从处理的角度来看,第二个选项效率更高,如果 List 很大并且在循环中调用 Dozer 会拖累性能,则可能是更好的选择。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-05-17
      • 1970-01-01
      • 2018-10-23
      • 2017-12-22
      • 2018-02-14
      • 2021-04-25
      • 2018-07-02
      • 2019-05-03
      相关资源
      最近更新 更多