分页问题:如何在响应体仅返回一次总条数和总页数,不冗余附加到每条数据
分页查询响应结构优化方案
1. 模型层改造
- 移除
GetRequestModelOut出参模型中冗余的totalCount、totalPages字段,仅保留业务属性 - 新增通用分页响应包装类,示例(C# 为例):
public class PagedResponse<T> { // 分页元数据 public int TotalCount { get; set; } public int TotalPages { get; set; } // 业务数据集合 public IEnumerable<T> Data { get; set; } }
- 可选优化:入参模型
GetRequestModel中的totalCount、totalPages可以移除,这两个值属于出参范畴,不需要作为入参传递
2. 业务逻辑层调整
修改GetRequest方法的返回逻辑,不再将分页字段拼入每条业务数据,改为同时返回业务集合与分页统计值,示例逻辑:
// 原逻辑保留:统计总条数 int totalCount = getCount1(filterParams); // 计算总页数 int totalPages = (int)Math.Ceiling(totalCount / 100.0); // 原逻辑保留:分页查询业务数据 IEnumerable<GetRequestModelOut> dataList = QueryPagedData(filterParams, pageNum, 100); // 改为返回元组,也可以自定义DTO承载这三个值 return (dataList, totalCount, totalPages);
3. 控制器层返回逻辑调整
直接将业务层返回的结果填充到分页包装类中返回即可,示例:
public IActionResult GetRequest([FromQuery] GetRequestModel param) { // 调用业务层获取数据 var (dataList, totalCount, totalPages) = _yourService.GetRequest(param); // 组装分页响应体 var response = new PagedResponse<GetRequestModelOut> { TotalCount = totalCount, TotalPages = totalPages, Data = dataList }; return Ok(response); }
最终响应结构示例
{ "totalCount": 1234, "totalPages": 13, "data": [ {"id":1, "regNumber":"XXX1", /* 其他业务字段 */}, {"id":2, "regNumber":"XXX2", /* 其他业务字段 */} ] }
内容的提问来源于stack exchange,提问作者ajd871
相关产品推荐
相关产品推荐

