spring cloud项目开发中,使用fegin进行远程调用 ,返回类型为PageJsonResult<List<BusinessLogVO>>,对List<BusinessLogVO>进行二次封装(for (BusinessLogVO resultInfo : resultInfos){})报java.lang.ClassCastException: java.util.LinkedHashMap cannot be cast to XXX。
解决方案:
写一个通用转换类
maven依赖
<dependency>
<groupId>net.sf.dozer</groupId>
<artifactId>dozer</artifactId>
<version>5.5.1</version>
</dependency>
public class GeneralConv {
/**
* 对象通用转换
*
* @param source 源对象
* @param destinationClass 目标类
* @param <T>
* @return 返回得到destinationClass
*/
public static <T> T conv(Object source, Class<T> destinationClass) {
if(null == source){
return null;
}
DozerBeanMapper dozerMapper = new DozerBeanMapper();
T convObj = dozerMapper.map(source, destinationClass);
return convObj;
}
/**
* 集合转换
*
* @param sourceList 源集合
* @param destinationClass 目标类
* @param <T>
* @return 返回得到destinationClass的集合结果
*/
public static <T> List<T> convert2List(List<?> sourceList, Class<T> destinationClass) {
List<T> destinationList = Lists.newArrayList();
sourceList.forEach(source -> {
destinationList.add(GeneralConv.conv(source, destinationClass));
});
return destinationList;
}
}
转换用法
List<BusinessLogVO> resultInfos = GeneralConv.convert2List((List<BusinessLogVO>)result.getInfo(),BusinessLogVO.class);