SpringBoot入门三:列表分页 |
您所在的位置:网站首页 › 分页展示 › SpringBoot入门三:列表分页 |
文章目录
步骤简介:步骤一、普通的列表分页对列表数据展示的优化第一步:将列表包装在code、message中第二步:将列表的字段名称做修改和精简
SpringBoot实现列表数据分页 系统环境: 编辑器:Idea2018.1 操作系统:win7 maven:1.8.0_171 步骤简介: 基本的列表分页对普通列表分页展示的优化 步骤 一、普通的列表分页StudentService中添加分页方法 /** * 普通的列表分页 * @param page * @param pageSize * @return */ public Page pageRequest(int page, int pageSize){ //findAll中的page是从0开始计数的 return studentRepository.findAll(PageRequest.of(page -1 , pageSize)); }StudentController中加上测试的调用方法 @RequestMapping(value = "/student/response", method = RequestMethod.GET) public Page page(@RequestParam int page, @RequestParam int pageSize){ return studentService.pageRequest(page, pageSize); }此时若测试接口,可以看到SpringBoot默认的分页数据方式: { "content": [ { "id": 27, "name": "demo" }, { "id": 1, "name": "demo11" }, { "id": 2, "name": "lisi" }, { "id": 29, "name": "lisi" }, { "id": 32, "name": "lisi" }, { "id": 35, "name": "lisi" }, { "id": 38, "name": "lisi" }, { "id": 30, "name": "wangwu" }, { "id": 33, "name": "wangwu" }, { "id": 36, "name": "wangwu" } ], "pageable": { "sort": { "sorted": false, "unsorted": true, "empty": true }, "offset": 0, "pageSize": 10, "pageNumber": 0, "paged": true, "unpaged": false }, "totalPages": 2, "totalElements": 15, "last": false, "number": 0, "size": 10, "sort": { "sorted": false, "unsorted": true, "empty": true }, "numberOfElements": 10, "first": true, "empty": false } 对列表数据展示的优化默认的列表展示样式不一定和项目中需要的分页样式相同,因此需要在此基础上做展示的优化,这里我分了两步,第一步,将列表包装在code、message中;第二步、将列表的字段名称做修改和精简 第一步:将列表包装在code、message中entity中添加CommonResponseEntity类 package com.example.demo.entity; public class CommonResponseEntity { private final int status; private final String message; private T data; private static final int SUCCESS_STATUS = 200; private static final int DEFAULT_STATUS = SUCCESS_STATUS; private static final String DEFAULT_MESSAGE = "ok"; public CommonResponseEntity(int status, String message, T data) { this.status = status; this.message = message; this.data = data; } public CommonResponseEntity(int status, String message){ this.status = status; this.message = message; } public static CommonResponseEntity success(T data){ return new CommonResponseEntity(DEFAULT_STATUS, DEFAULT_MESSAGE, data); } public static CommonResponseEntity error(int status, String message){ return new CommonResponseEntity(status, message); } public int getStatus() { return status; } public String getMessage() { return message; } public T getData() { return data; } public void setData(T data) { this.data = data; } }在StudentController中添加路由测试: @RequestMapping(value = "/student/responsePage", method = RequestMethod.GET) public CommonResponseEntity responsePage(@RequestParam int page, @RequestParam int pageSize){ return CommonResponseEntity.success(studentService.pageRequest(page, pageSize)); }若此时测试返回数据样式可以看到统一成了code、message包装后的样式: { "status": 200, "message": "ok", "data": { "content": [ { "id": 27, "name": "demo" }, { "id": 1, "name": "demo11" }, { "id": 2, "name": "lisi" }, { "id": 29, "name": "lisi" }, { "id": 32, "name": "lisi" }, { "id": 35, "name": "lisi" }, { "id": 38, "name": "lisi" }, { "id": 30, "name": "wangwu" }, { "id": 33, "name": "wangwu" }, { "id": 36, "name": "wangwu" } ], "pageable": { "sort": { "sorted": false, "unsorted": true, "empty": true }, "offset": 0, "pageSize": 10, "pageNumber": 0, "paged": true, "unpaged": false }, "totalPages": 2, "totalElements": 15, "last": false, "number": 0, "size": 10, "sort": { "sorted": false, "unsorted": true, "empty": true }, "numberOfElements": 10, "first": true, "empty": false } } 第二步:将列表的字段名称做修改和精简以返回列表格式为page、pageSize、totalPage为例,需要在entity中添加PageResponse package com.example.demo.entity; import org.springframework.data.domain.Page; import java.math.BigDecimal; import java.util.List; public class PageResponse { private final List list; private final int page; private final int pageSize; private final int totalPage; public PageResponse(List data, int pageSize, int page){ this.page = page; this.pageSize = pageSize; this.totalPage = (int)Math.ceil(BigDecimal.valueOf(data.size()).divide(BigDecimal.valueOf(pageSize)).doubleValue()); this.list = data.subList((page -1) * pageSize, Math.min(page * pageSize, data.size())); } public PageResponse(Page page){ this.list = page.getContent(); //page类的number是从0开始计数的 this.page = page.getNumber() + 1; this.pageSize = page.getSize(); this.totalPage = page.getTotalPages(); } public static PageResponse of(List data, int pageSize, int page){ return new PageResponse(data, pageSize, page); } public List getList() { return list; } public int getPage() { return page; } public int getPageSize() { return pageSize; } public int getTotalPage() { return totalPage; } }然后在StudentController中添加测试方法: @RequestMapping(value = "/student/responsePageResponse", method = RequestMethod.GET) public CommonResponseEntity responsePageResponse(@RequestParam int page, @RequestParam int pageSize){ return CommonResponseEntity.success(PageResponse.of(studentService.findAll(), pageSize, page)); }最后,为了验证,可以测试下该路由,可以看到数据已经成为我们需要的样子: { "status": 200, "message": "ok", "data": { "list": [ { "id": 27, "name": "demo" }, { "id": 1, "name": "demo11" }, { "id": 2, "name": "lisi" }, { "id": 29, "name": "lisi" }, { "id": 32, "name": "lisi" }, { "id": 35, "name": "lisi" }, { "id": 38, "name": "lisi" }, { "id": 30, "name": "wangwu" }, { "id": 33, "name": "wangwu" }, { "id": 36, "name": "wangwu" } ], "page": 1, "pageSize": 10, "totalPage": 2 } } |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |