这篇文章主要讲解了“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进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。