queryWrapper.between(!CollectionUtils.isEmpty(birthday), PeopleEntity::getBirthday,birthday.get(0),birthday.get(1));中!CollectionUtils.isEmpty(birthday)

使用between函数构造查询条件,在查询之前虽然添加了查询条件,但是当集合为空的时候仍然报错List集合下标越界
下面是List通过下标访问的get方法

    private void rangeCheck(int index) {
        if (index >= size)
            throw new IndexOutOfBoundsException(outOfBoundsMsg(index));
    }

当点进去打断点发现其size为0,所以访问失败。
在这个错误出现的原因为birthday集合在接收前端传入参数时是[ ],不为null,所以会报数组下标越界。
但是在上述条件添加的情况下仍然出现这个问题,经过查询可以大致确定问题所在点如下

在 Java 中,方法的参数是在调用方法之前进行计算和求值的。
即使 !CollectionUtils.isEmpty(birthday) 的结果为 false,也不会影响实际传递给方法的参数

所以对于此类问题,在构造查询条件的时候使用条件参数需要注意
解决此问题的方法是将条件放到外面重新构造如下:

if(!CollectionUtils.isEmpty(birthday)){
	queryWrapper.between( PeopleEntity::getBirthday,birthday.get(0),birthday.get(1));
}
Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐