如何彻底禁用Micronaut分页中的max-page-size限制?
可行,同时推荐更轻量的替代方案
扩展Pageable类的实现方案(完全可行)
如果偏好通过扩展Pageable类来绕过默认限制,可以按以下步骤操作:
- 自定义一个继承自
DefaultPageable的类(比如UnlimitedPageable),或者直接实现io.micronaut.data.model.Pageable接口 - 重写
getMaxPageSize()方法返回Integer.MAX_VALUE(仅用于适配框架校验逻辑,并非业务上的硬编码超大值),同时确保getSize()直接返回请求传入的数值,不做截断 - 自定义
PageableResolverBean替换默认实现,在解析分页参数时返回你自定义的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
相关产品推荐
相关产品推荐

