一、问题描述
- serve层定义一个对象集合接收mybatis返回的结果,查询结果为空,但是接收集合对象长度却为1,集合内部显示All elements are null;导致在直接调用list集合中一些方法时导致报错java.lang.NullPointerException: null
二、原因分析
1、使用了MySQL中的聚合函数
selectIFNULL(GROUP_CONCAT(B00),'') as examineRange,IFNULL(GROUP_CONCAT(B0101),'') as examineRangeName
from(selecta.B00,b.B0101fromjxkh_khdxfwxd ainner join b01 b ona.B00 = b.B00order bya.PORDER)a
对于我们来说,这条数据是空的,也仅仅是因为我们要查询的字段是空的,但是其他数据都不是空的,所以他把这个数据数据库并没有当作一条空数据来看,还是映射给了我们的对象,导致List的内部有一个空对象,因为list内部是可以支持null的。
三、解决方案
手动将这种情况给排除掉。或者,先把list中的null元素给排除掉,然后在进行业务的数据处理
//移除第一个null
list.remove(null);
//或移除所有的null元素
list.removeAll(Collections.singleton(null));
或者也可通过增加判断来进行处理
if (CollectionUtils.isNotEmpty(listData) && listData.get(0) != null) {/*业务逻辑代码*/}