解决:java.lang.ClassCastException: [Ljava.lang.Object

环境:SpringBoot+JPA

查询方式为复杂生成JPQL语句

Query query2 = entityManager.createQuery(sql2);
query2.setFirstResult(start);
query2.setMaxResults(size);
List<Map<String,String>> lists2 = query2.getResultList();

但是有一个问题,生成的集合通过PagedResponse往前台传过去后在swaggerUI接收后只有value,没有key,没有在这里我打算用一个新的集合手动把key给对应上,但是把原集合遍历的时候就出问题了,无论是foreach还是for循环都会报错。 

就是这个    java.lang.ClassCastException: [Ljava.lang.Object;XXXX 

解决方法:

Query query2 = entityManager.createQuery(sql2);
query2.setFirstResult(start);
query2.setMaxResults(size);
List<Object[]> lists2 = query2.getResultList();
List<Map<String,String>> mapList = new ArrayList<>();
Object[]len = null;
if(lists2!=null && lists2.size()>0){
    for(int i=0;i<lists2.size();i++){
        len = lists2.get(i);
        Map<String,String> stringMap = new HashMap<>();
        stringMap.put("id",len[0]!=null?len[0].toString():null);
        mapList.add(stringMap);
    }
}

把查询出来的List集合存放的元素编程Object数组,然后按照顺序取数组中的值放到新集合中,就ok了,但切记数组中的值转为String时一定要加上条件表达式,否则为空时会报空指针。

猜你喜欢

转载自blog.csdn.net/yssa1125001/article/details/87082351