使用 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-2026 CODEPRJ.COM