您好,登录后才能下订单哦!
这篇文章主要讲解了“VO转化设计的方法步骤”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“VO转化设计的方法步骤”吧!
1、工具类
支持分页列表、不分页列表、单个转化调用,工具代码还是比较简洁,比较清爽的。
public 
   
 interface 
   
 VOConvertable<S,T> { 
     
 /** 
      
 * 转化为基础接口 
      
 * @param source 原始对象 
      
 * @return 转化以后的对象 
      
 */ 
     
 T convertVO(S source); 
} 
@Slf4j 
 
public 
    
  class 
    
  VOConvertUtils<S,T  
  extends 
    
  VOConvertable> { 
 
     
  private 
    
  VOConvertUtils() { 
 
     
  } 
 
     
  public 
    
  static 
    
  VOConvertUtils instance =  
  new 
    
  VOConvertUtils(); 
 
     
  /** 
 
      
  * 查询分页信息 
 
      
  * @param sourcePage 传入的分页DTO 
 
      
  * @param targetClazz 转化的目标对象 
 
      
  * @return 返回的集合 
 
      
  */ 
 
     
  public 
    
  PagedDTO<T> convertVOPage(PagedDTO<S> sourcePage,Class<T> targetClazz) { 
 
         
  if 
    
  (sourcePage ==  
  null 
    
  || sourcePage ==  
  null 
  ) { 
 
             
  return 
    
  null 
  ; 
 
         
  } 
 
         
  PagedDTO<T> pageResult =  
  new 
    
  PagedDTO<T>(); 
 
         
  pageResult.setPageNum(sourcePage.getPageNum()); 
 
         
  pageResult.setPageSize(sourcePage.getPageSize()); 
 
         
  pageResult.setTotalRecord(sourcePage.getTotalRecord()); 
 
         
  pageResult.setList(convertVOList(sourcePage.getList(),targetClazz)); 
 
         
  return 
    
  pageResult; 
 
     
  } 
 
     
  /** 
 
      
  * 查询列表信息 
 
      
  * @param sources 传入的集合 
 
      
  * @param targetClazz  转化的目标对象 
 
      
  * @return 返回的集合 
 
      
  */ 
 
     
  public 
    
  List<T> convertVOList(List<S> sources,Class<T> targetClazz)  { 
 
         
  if 
    
  (sources ==  
  null 
    
  || targetClazz ==  
  null 
  ) { 
 
             
  return 
    
  null 
  ; 
 
         
  } 
 
         
  List<T> list =  
  new 
    
  ArrayList<T>(sources.size()); 
 
         
  for 
    
  (S source: sources) { 
 
             
  list.add((T) convertVO(source,targetClazz)); 
 
         
  } 
 
         
  return 
    
  list; 
 
     
  } 
 
     
  /** 
 
      
  * 对象转化 
 
      
  * @param source 原始对象 
 
      
  * @param targetClazz 目标对象 
 
      
  * @return 转化以后的对象 
 
      
  */ 
 
     
  public 
    
  T convertVO(S source,Class<T> targetClazz) { 
 
         
  if 
    
  (source ==  
  null 
    
  || targetClazz ==  
  null 
  ) { 
 
             
  return 
    
  null 
  ; 
 
         
  } 
 
         
  try 
    
  { 
 
             
  T instance = targetClazz.newInstance(); 
 
             
  return 
    
  (T)instance.convertVO(source); 
 
         
  }  
  catch 
    
  (Exception e) { 
 
             
  log.error( 
  "convertVO error" 
  ,e); 
 
             
  return 
    
  null 
  ; 
 
         
  } 
 
     
  } 
 
} 
 
1: vo对象需要增加@Builder @AllArgsConstructor @NoArgsConstructor 这几个注解,其实构造模式通过lombok插件来处理了,我们无需自己去实现,只需要构造相关的数据就好了。
2: vo对象实现VOConvertable这个接口来实现转化为vo接口, 接口定义的泛形需要调用方自己传递。
@Data 
  
@ApiModel 
   (value =  
   "转链结果类" 
   ) 
  
@Builder 
  
@AllArgsConstructor 
  
@NoArgsConstructor 
  
public 
     
   class 
     
   ItemConvertVO  
   implements 
     
   VOConvertable<ItemConvertDTO,ItemConvertVO>,Serializable { 
  
     
   private 
     
   static 
     
   final 
     
   long 
     
   serialVersionUID = -1194554463611634742L; 
  
     
   @ApiModelProperty 
   (value =  
   "商品ID" 
   ) 
  
     
   private 
     
   String id; 
  
     
   @ApiModelProperty 
   (value =  
   "第三方商品ID" 
   ) 
  
     
   private 
     
   String itemId; 
  
     
   @ApiModelProperty 
   (value =  
   "优惠券转链" 
   ) 
  
     
   private 
     
   String couponUrl; 
  
     
   @ApiModelProperty 
   (value =  
   "商品转链" 
   ) 
  
     
   private 
     
   String itemUrl; 
  
     
   @Override 
  
     
   public 
     
   ItemConvertVO convertVO(ItemConvertDTO itemConvertDTO) { 
  
         
   if 
     
   (itemConvertDTO ==  
   null 
   ) { 
  
             
   return 
     
   null 
   ; 
  
         
   } 
  
         
   return 
     
   ItemConvertVO.builder() 
  
                 
   .couponUrl(itemConvertDTO.getCouponUrl()) 
  
                 
   .itemUrl(itemConvertDTO.getItemUrl()) 
  
                 
   .itemId(itemConvertDTO.getItemId()) 
  
                 
   .id(String.valueOf(itemConvertDTO.getId())) 
  
                 
   .build(); 
  
     
   } 
  
} 
  
这边需要将ItemConvertDTO转化为ItemConverVO,一行代码就可以了,使用起来也很便捷。
@RequestMapping (value =  "/convert" , method = RequestMethod.GET) 
  
@ApiOperation (value =  "商品详情-转链接口" ) 
  
public   ItemConvertVO itemConvert( @RequestParam ( "id" ) String id) { 
  
     AnchorDubboDTO anchorDubboDTO = AnchorHolder.checkStatusAndGetAnchor(); 
  
     log.info(String.format( "%s|/app/item/convert|GET|id=%s" , anchorDubboDTO.getAnchorId(), id)); 
  
     checkId(id); 
  
     ItemConvertDTO itemConvertDTO = itemService.itemUrlConvert(Long.valueOf(id)); 
  
     return   (ItemConvertVO) VOConvertUtils.instance.convertVO(itemConvertDTO,ItemConvertVO. class ); 
  
} 
  
感谢各位的阅读,以上就是“VO转化设计的方法步骤”的内容了,经过本文的学习后,相信大家对VO转化设计的方法步骤这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是亿速云,小编将为大家推送更多相关知识点的文章,欢迎关注!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。