You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 17:43:04