如何在Spring Boot返回的JSON对象中添加总记录数
Spring Boot返回包含总记录数的分页JSON数据
要实现返回包含总记录数和分页数据的JSON结构,你需要通过封装响应实体的方式来实现,具体步骤如下:
1. 创建分页响应DTO类
定义一个专门的DTO类来封装总记录数和分页数据列表,Spring Boot会自动将其序列化为你期望的JSON结构:
import lombok.Data; import java.util.List; @Data // 使用Lombok简化getter/setter,若未使用Lombok需手动编写 public class PageResponse<T> { private long total_records; private List<T> data; public PageResponse(long total_records, List<T> data) { this.total_records = total_records; this.data = data; } }
2. 修改服务层方法
调整服务层的view方法,使其同时返回总记录数和当前页的数据列表。先查询所有符合条件的记录总数,再查询当前页的分页数据:
@Service public class TableService { @Autowired private TableRepository tableRepository; // 分页大小可根据业务需求自定义 private static final int PAGE_SIZE = 10; public PageResponse<TableModel> view(Integer page) { // 计算分页起始偏移量 int offset = (page - 1) * PAGE_SIZE; // 查询当前页数据 List<TableModel> pageData = tableRepository.findPageData(offset, PAGE_SIZE); // 查询总记录数 long totalRecords = tableRepository.countTotalRecords(); // 封装到响应DTO return new PageResponse<>(totalRecords, pageData); } }
注:如果使用Spring Data JPA的分页能力,可直接通过
Page对象获取总记录数和数据,简化代码:public PageResponse<TableModel> view(Integer page) { Pageable pageable = PageRequest.of(page - 1, PAGE_SIZE); Page<TableModel> pageResult = tableRepository.findAll(pageable); return new PageResponse<>(pageResult.getTotalElements(), pageResult.getContent()); }
3. 修改控制器方法
将控制器返回类型改为自定义的PageResponse<TableModel>,调用修改后的服务层方法返回封装数据:
@GetMapping("/view") public PageResponse<TableModel> view( @RequestParam(value = "page", defaultValue = "1", required = false) Integer page ) { return service.view(page); }
修改完成后,接口返回的JSON结构将与你期望的一致:
{ "total_records":100, "data": [ { "name": "wrvee", "email_id": "as@gmail.com", "check_in": null, "check_out": null, "data": null }, { "name": "sefse", "email_id": "vsd@gmail.com", "check_in": null, "check_out": null, "data": null } ] }
内容的提问来源于stack exchange,提问作者Mustafa Dahodwala
相关产品推荐
相关产品推荐

