进行 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本身也是一个实体类,那么这时候复制就不应该是一个简简单单的复制,而应该是一个深层的复制,通过这个工具类就可以做到