问题说明
进行接口测试时,被前端告知我的分页查询不管传第几页过来查到的结果都是一样的,遂开始进行排查。
问题复现
使用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);