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

quarkus分页查询空表抛RestDataPanacheException如何返回空列表?

问题结论

你遇到的是quarkus-spring-data-rest包的已知历史bug,根因是空表场景下,框架内部计算分页偏移量时逻辑错误,错误得到下标为-1的分页参数,传入quarkus-rest-data-panache的分页接口后触发参数合法性校验失败。

解决方案

  • 方案1:升级Quarkus版本
    该bug已在Quarkus 2.16.0及之后的稳定版本中修复,直接将项目的Quarkus版本升级至2.16.10.Final、3.2.x LTS或更高的稳定版即可解决问题。
  • 方案2:临时异常拦截适配(不升级版本场景)
    新增全局异常处理器捕获RestDataPanacheException,判断异常根因为页下标非法时,直接返回符合预期的空分页结果,示例代码如下:
    @Provider
    public class PanachePageExceptionMapper implements ExceptionMapper<RestDataPanacheException> {
        @Override
        public Response toResponse(RestDataPanacheException e) {
            if (e.getCause() instanceof IllegalArgumentException
                && e.getCause().getMessage().contains("Page index must be >= 0")) {
                // 构造空分页返回体,可根据自己接口的返回格式调整
                return Response.ok(Page.empty()).build();
            }
            return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(e.getMessage()).build();
        }
    }
    
  • 方案3:重写对应Repository的列表查询方法
    手动接管分页参数校验,当下标小于0时强制设置为0再执行查询:
    @RepositoryRestResource
    public interface MyEntityRepository extends PanacheRepository<MyEntity> {
        @Override
        default Page<MyEntity> findAll(Pageable pageable) {
            int pageIndex = Math.max(pageable.getPageNumber(), 0);
            return PanacheRepository.super.findAll(Page.of(pageIndex, pageable.getPageSize()));
        }
    }
    

内容的提问来源于stack exchange,提问作者Ethan Miller

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 04:06:03