实体类集合转VO集合工具类

实体类集合转VO集合工具类

在工作中,涉及到了技术升级,由之前的Dubbo的RPC调用升级为Feign的Http调用。远程调用升级为Feign之后,由原本的类级别的服务暴露细化到了方法级别,大幅提高了代码得安全性,减少不必要的资源浪费。由于公司项目众多,不可能一次性全部升级,并且为了尽可能的减少不必要的工作量,就采用了以下方案,将原先map类型参数转换为对应的DTO,而直接返回的实体则采用了VO进行再包装。单个实体转VO,可以直接使用org.springframework.beans.BeanUtils提供的copyProperties(source, target)方法,直接将实体中各字段对应的值拷贝到VO中(注意:实体与VO的字段名和类型应保持一致)。List这种类型的,可以直接使用for循环进行复制。但是考虑到工作量较大,就写了一个工具类。

入参为未知类型的实体集合与目标集合的泛型字节码类型(类名.class)

创建一个新集合用来存储最终结果,泛型为目标类型T

遍历循环实体集合

通过Class获取构造器并创建新的实例

使用BeanUtils.copyProperties,将实体数据拷贝到目标类型

将拷贝过数据的目标类型添加到集合中

public static <T> List<T> entityListToVOList(List<?> list, Class<T> clazz) {
    List<T> result = new ArrayList<>(list.size());
    for (Object source : list) {
        T target;
        try {
            target = clazz.getDeclaredConstructor().newInstance();
        } catch (Exception e) {
            throw new RuntimeException();
        }
        BeanUtils.copyProperties(source, target);
        result.add(target);
    }
    return result;
}

版权声明:本文为yyh695809001原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。