進行 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本身也是一個實體類,那么這時候復制就不應該是一個簡簡單單的復制,而應該是一個深層的復制,通過這個工具類就可以做到
