实体类集合转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;
}