使用PageHelper.startPage()方法分页时,切换了页码但返回的数据却一样

634 阅读1分钟

问题说明

进行接口测试时,被前端告知我的分页查询不管传第几页过来查到的结果都是一样的,遂开始进行排查。

问题复现

使用Postman请求自己的接口,发现不像前端说的那样传第几页过来都是一样的结果,而是当页码 > 数据大小/页大小时,均会返回最后一页的数据。

问题解决

查阅源码发现,这是由于在使用分页时的一个参数reasonable导致的,我的项目默认全局设置了reasonable为true,效果是使分页数据合理化,就会像上面一样始终有数据返回。

解决办法1:在配置中全局关闭reasonable

pagehelper.reasonable=true

解决办法2: 在代码中传参

// 分页源码   
public static <E> Page<E> startPage(int pageNum, int pageSize, boolean count, Boolean reasonable, Boolean pageSizeZero) {
        Page<E> page = new Page(pageNum, pageSize, count);
        page.setReasonable(reasonable);
        page.setPageSizeZero(pageSizeZero);
        Page<E> oldPage = getLocalPage();
        if (oldPage != null && oldPage.isOrderByOnly()) {
            page.setOrderBy(oldPage.getOrderBy());
        }

        setLocalPage(page);
        return page;
} 

// 业务代码: 关闭合理化,超出最大页时不返回数据
PageHelper.startPage((int) params.get(PageUtils.offset), (int) params.get(PageUtils.limit), true, false, false);