看了一些网上的感觉都是
听君一席话, 如听一席话.
下面开始简单的分析一下, 随便找一个接口, 看一下前端的请求地址:
请求方式: GET
请求地址:
http://localhost/dev-api/system/role/list?pageNum=1&pageSize=10
后端接口:
@PreAuthorize("@ss.hasPermi('system:role:list')")
@GetMapping("/list")
public TableDataInfo list(SysRole role) {
startPage();
List<SysRole> list = roleService.selectRoleList(role);
return getDataTable(list);
}
跟一下 startPage();
public static void startPage()
{
PageDomain pageDomain = TableSupport.buildPageRequest();
Integer pageNum = pageDomain.getPageNum();
Integer pageSize = pageDomain.getPageSize();
String orderBy = SqlUtil.escapeOrderBySql(pageDomain.getOrderBy());
Boolean reasonable = pageDomain.getReasonable();
PageHelper.startPage(pageNum, pageSize, orderBy).setReasonable(reasonable);
}
看一下 buildPageRequest
这个方法做了什么
public static PageDomain getPageDomain()
{
PageDomain pageDomain = new PageDomain();
pageDomain.setPageNum(Convert.toInt(ServletUtils.getParameter(PAGE_NUM), 1));
pageDomain.setPageSize(Convert.toInt(ServletUtils.getParameter(PAGE_SIZE), 10));
pageDomain.setOrderByColumn(ServletUtils.getParameter(ORDER_BY_COLUMN));
pageDomain.setIsAsc(ServletUtils.getParameter(IS_ASC));
pageDomain.setReasonable(ServletUtils.getParameterToBool(REASONABLE));
return pageDomain;
}
简单处理一下常量:
public static PageDomain buildPageRequest() {
PageDomain pageDomain = new PageDomain();
// 通过 Request 对象来获取参数值
HttpServletRequest request = RequestHolder.getRequest();
pageDomain.setPageNum(StringUtils.isEmpty(request.getParameter("pageNum")) ? 1 : Integer.parseInt(request.getParameter("pageNum")));
pageDomain.setPageSize(StringUtils.isEmpty(request.getParameter("pageSize")) ? 10 : Integer.parseInt(request.getParameter("pageSize")));
pageDomain.setOrderBy(request.getParameter("orderBy"));
pageDomain.setReasonable(ServletUtils.getParameterToBool(REASONABLE));
return pageDomain;
}
到这里其实就明白了. 底层的处理直接从 HttpServletRequest
这个对象中获取 pageNum
和 pageSize
.
所以可以猜想如果前端传了分页这两个值后端在接口中没有接收, 也是可以实现分页的效果的. 测试如下: 即
@PreAuthorize("@ss.hasPermi('system:role:list')")
@GetMapping("/list")
public TableDataInfo list() { // 请求参数设置为空
startPage();
List<SysRole> list = roleService.selectRoleList(new SysRole());
return getDataTable(list);
}
注: getDataTable
的作用是封装参数并返回 TableDataInfo
对象