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

如何彻底禁用Micronaut分页中的max-page-size限制?

可行,同时推荐更轻量的替代方案

扩展Pageable类的实现方案(完全可行)

如果偏好通过扩展Pageable类来绕过默认限制,可以按以下步骤操作:

  • 自定义一个继承自DefaultPageable的类(比如UnlimitedPageable),或者直接实现io.micronaut.data.model.Pageable接口
  • 重写getMaxPageSize()方法返回Integer.MAX_VALUE(仅用于适配框架校验逻辑,并非业务上的硬编码超大值),同时确保getSize()直接返回请求传入的数值,不做截断
  • 自定义PageableResolver Bean替换默认实现,在解析分页参数时返回你自定义的Pageable实例

示例代码:

public class UnlimitedPageable extends DefaultPageable {
    public UnlimitedPageable(int page, int size, Sort sort) {
        super(page, size, sort);
    }

    @Override
    public int getMaxPageSize() {
        return Integer.MAX_VALUE; // 绕过框架的默认上限校验
    }

    @Override
    public int getSize() {
        return super.getSize(); // 直接返回请求传入的分页大小
    }
}

@Singleton
@Replaces(DefaultPageableResolver.class)
public class UnlimitedPageableResolver extends DefaultPageableResolver {
    @Override
    public Pageable resolveArgument(ArgumentConversionContext<Pageable> context, HttpRequest<?> request, List<MediaType> mediaTypes) {
        Pageable defaultPage = super.resolveArgument(context, request, mediaTypes);
        return new UnlimitedPageable(defaultPage.getPageNumber(), defaultPage.getPageSize(), defaultPage.getSort());
    }
}

更轻量的替代方案:自定义分页配置Bean

不想扩展Pageable的话,还可以通过自定义配置Bean直接覆盖默认的分页限制逻辑,无需硬编码超大值:

@Singleton
public class CustomPageableConfig extends DataConfiguration.PageableConfiguration {
    @Override
    public Integer getMaxPageSize() {
        return null; // 返回null让框架跳过分页大小的上限校验
    }
}

这个方案更简洁,直接通过替换配置Bean让框架放弃默认的100条上限限制,不需要修改Pageable的实现。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 06:32:44