使用 DozerBeanMapper 拷贝属性


进行 Web 开发的时候,我们往往需要构建 VO 进行返回数据给前端,那么如何给 VO 赋值呢?如果是一个对象的话,我们可以使用 SpringBoot 提供的 BeanUtils.copyProperties(source, target) 这种方式,如下示例:

    public SpuSimplifyVO getSimplifySpu(@PathVariable @Positive Long id) {
        Spu spu =  this.spuService.getSpu(id);
        SpuSimplifyVO vo = new SpuSimplifyVO();
        BeanUtils.copyProperties(spu, vo);

        return vo;
    }

但是如果我们需要给一个数组或者是 List 进行批量赋值的话,BeanUtils 是不能满足的,这种情况下可以使用  DozerBeanMapper 进行属性拷贝。例如需要将 List<Spu> 批量赋值给 List<SpuSimplifyVO> 那么就可以如下使用:

1、在 pom.xml 中添加依赖

 <dependency>
   <groupId>com.github.dozermapper</groupId>
   <artifactId>dozer-core</artifactId>
   <version>6.5.0</version>
 </dependency>

2、调用代码:

    public List<SpuSimplifyVO> getLatestSpuList() {
        Mapper mapper = DozerBeanMapperBuilder.buildDefault();
        List<Spu> spuList = this.spuService.getLatestPagingSpu();
        List<SpuSimplifyVO> vos = new ArrayList<>();

        /*for (Spu s :
                spuList) {
            SpuSimplifyVO vo = mapper.map(s, SpuSimplifyVO.class);
            vos.add(vo);
        }*/

        spuList.forEach(s->{
            SpuSimplifyVO vo = mapper.map(s, SpuSimplifyVO.class);
            vos.add(vo);
        });

        return vos;
    }

使用 DozerBeanMapper 不仅仅是可以对数组进行属性赋值,主要是可以进行深层复制,也就是说,如果在 Spu 中还有一个成员变量 Sku, 而Sku本身也是一个实体类,那么这时候复制就不应该是一个简简单单的复制,而应该是一个深层的复制,通过这个工具类就可以做到


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM