Spring Boot分页接口返回空内容问题排查求助
Spring Boot分页查询广告接口返回空content排查方案
问题现象
Postman调用分页查询广告接口返回200状态码,但content字段为空数组;返回的Page结构中totalElements为5(说明匹配到5条数据),但numberOfElements为0,当前页码number是1,每页大小size是10。
排查步骤与解决方案
1. 分页页码索引不匹配(最直接原因)
Spring Data JPA的分页索引从0开始,结合返回数据:
- 总数据量5条,每页10条,仅第0页有数据
- 调用时传入
page=1,实际请求的是第二页,自然没有数据
验证/解决:
- 调用接口时传入
page=0,查看content是否返回5条数据 - 如果业务要求前端传入从1开始的页码,需在Controller中转换参数:
@RequestParam(value = "page", defaultValue = "0") int page = page > 0 ? page - 1 : 0;
2. 校验查询条件有效性
虽然totalElements=5证明查询条件匹配到数据,但仍需确认:
- 必填参数
category.id和advert_type_id是否对应存在数据的分类/广告类型 - 价格区间参数
price_start和price_end是否未误过滤数据(Service中priceControl方法需确保仅当priceStart != null && priceEnd != null && priceStart > priceEnd时抛出异常) - 搜索关键词
q是否为空或未误匹配过滤规则
3. 分页工具类逻辑校验
查看分页工具类代码,逻辑无问题:
public Pageable getPageableWithProperties(int page, int size, String sort, String type) { Pageable pageable=PageRequest.of(page,size, Sort.by(sort).ascending()); if(Objects.equals(type,"desc")){ pageable=PageRequest.of(page,size,Sort.by(sort).descending()); } return pageable; }
仅需确认sort参数对应Advert实体的合法属性路径(如category.id是否为关联属性的正确写法),排序错误不会导致content为空,仅影响排序顺序。
4. 自定义查询语句验证
Repository的@Query逻辑正确,但可开启SQL日志确认实际执行的SQL:
在application.yml中添加配置:
spring: jpa: show-sql: true properties: hibernate: format_sql: true
通过打印的SQL确认查询条件、分页参数是否正确,是否确实查询到5条数据。
内容的提问来源于stack exchange,提问作者Duygu Yilmaz
相关产品推荐
相关产品推荐

