SpringBoot分页Pageable最大size的自定义配置
- 起因
在工作中,涉及到导出的功能,由于导出和搜索的结果是相同的,所以导出和搜索是同一接口。但由于搜索的分页是每页10条,而导出却是没有条数限制的,所以引出下面的问题
controller方法如下:
@PostMapping("/orders/search") public Page<SearchOrderOut> getOrders(@RequestBody @Valid Search search,@PageableDefault(sort = {"modifiedDate", "createdDate"},direction = Sort.Direction.DESC) Pageable pageable) {return preOrderService.getOrders(search, pageable); }
通过前端传递的pagesize来设定分页的大小,在使用中发现无论page的size修改为多大,导出最多只能2000条,于是怀疑源码中可能有最大值的限制,于是跟踪源码发现果真如此,源码如下(仅相关代码):
/** * Extracts paging information from web requests and thus allows injecting {@link Pageable} instances into controller * methods. Request properties to be parsed can be configured. Default configuration uses request parameters beginning * with {@link #DEFAULT_PAGE_PARAMETER}{@link #DEFAULT_QUALIFIER_DELIMITER}. * * 从Web请求中提取分页信息,从而允许将Pageable实例注入controller方法 * 可以配置要解析的请求属性,默认配置使用以DEFAULT_PAGE_PARAMETER,DEFAULT_QUALIFIER_DELIMITER开头的请求参数 * * @since 1.6 * @author Oliver Gierke * @author Nick Williams * @author Mark Paluch */ public class PageableHandlerMethodArgumentResolver implements PageableArgumentResolver {private static final String DEFAULT_PAGE_PARAMETER = "page";private static final String DEFAULT_SIZE_PARAMETER = "size";private static final String DEFAULT_PREFIX = "";private static final String DEFAULT_QUALIFIER_DELIMITER = "_";// 默认page size最大2000private static final int DEFAULT_MAX_PAGE_SIZE = 2000;static final Pageable DEFAULT_PAGE_REQUEST = new PageRequest(0, 20);private Pageable fallbackPageable = DEFAULT_PAGE_REQUEST;private SortArgumentResolver sortResolver;private String pageParameterName = DEFAULT_PAGE_PARAMETER;private String sizeParameterName = DEFAULT_SIZE_PARAMETER;private String prefix = DEFAULT_PREFIX;private String qualifierDelimiter = DEFAULT_QUALIFIER_DELIMITER;// maxPageSize 最大2000private int maxPageSize = DEFAULT_MAX_PAGE_SIZE;@Overridepublic Pageable resolveArgument(MethodParameter methodParameter, ModelAndViewContainer mavContainer,NativeWebRequest webRequest, WebDataBinderFactory binderFactory) {assertPageableUniqueness(methodParameter);Pageable defaultOrFallback = getDefaultFromAnnotationOrFallback(methodParameter);String pageString = webRequest.getParameter(getParameterNameToUse(pageParameterName, methodParameter));// sizeParameterName="size",从请求中拿到size值String pageSizeString = webRequest.getParameter(getParameterNameToUse(sizeParameterName, methodParameter));boolean pageAndSizeGiven = StringUtils.hasText(pageString) && StringUtils.hasText(pageSizeString);if (!pageAndSizeGiven && defaultOrFallback == null) {return null;}int page = StringUtils.hasText(pageString) ? parseAndApplyBoundaries(pageString, Integer.MAX_VALUE, true): defaultOrFallback.getPageNumber();int pageSize = StringUtils.hasText(pageSizeString) ? parseAndApplyBoundaries(pageSizeString, maxPageSize, false): defaultOrFallback.getPageSize();// Limit lower boundpageSize = pageSize < 1 ? defaultOrFallback.getPageSize() : pageSize;// Limit upper bound// 无论上面怎么处理,pageSize>2000的话,pageSize=2000,否则就是pageSize的值pageSize = pageSize > maxPageSize ? maxPageSize : pageSize;Sort sort = sortResolver.resolveArgument(methodParameter, mavContainer, webRequest, binderFactory);// Default if necessary and default configuredsort = sort == null && defaultOrFallback != null ? defaultOrFallback.getSort() : sort;return new PageRequest(page, pageSize, sort);} }
自定义page配置来解决
自定义size最大为10000
import org.springframework.context.annotation.Configuration;
import org.springframework.data.web.PageableHandlerMethodArgumentResolver;
import org.springframework.web.method.support.HandlerMethodArgumentResolver;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;import java.util.List;@Configuration
public class PageConfig extends WebMvcConfigurerAdapter {private static final int PMP_MAX_PAGE_SIZE = 10000;@Overridepublic void addArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers) {PageableHandlerMethodArgumentResolver resolver = new PageableHandlerMethodArgumentResolver();resolver.setMaxPageSize(PMP_MAX_PAGE_SIZE);argumentResolvers.add(resolver);super.addArgumentResolvers(argumentResolvers);}
}
来源于:
https://blog.csdn.net/u010634897/article/details/81612124
SpringBoot分页Pageable最大size的自定义配置相关推荐
- 【SpringBoot零基础案例09】【IEDA 2021.1】SpringBoot将核心配置文件中的自定义配置映射到一个对象
使用@Value注解获取核心配置文件中的值时只能是一个一个的获取,如果在配置文件中有多个对象需要用到名称一样的配置,如name.age等属性,则需要区分是这个属性是哪个对象的.因此可以将这些配置映射到 ...
- springboot分页pageable实现简单实用
方便后期使用分页记录一下 springboot项目+mybatis实现 1.导入java包 pom.xml <!--集成分页--><dependency><groupId ...
- c#分页_使用Kotlin搭配Springboot开发RESTFul接口(二)自定义配置、跨域、分页
前言 上一篇文章请看这里:使用Kotlin搭配Springboot开发RESTFul接口与服务部署 上一篇文章介绍了Kotlin搭配Springboot的开发流程,从搭建项目.ORM.Controll ...
- pageable设置size_总结SpringBoot使用Pageable实现分页源码
之前写过一篇mybatis-plus的文章,但是有朋友说技术太过简单了,想让我写一下分页什么的技术,这里想跟大家解释一下:因为刚开始在这种平台上写文章,确实是写的慢,并且,有些技术我自己也没怎么使用过 ...
- SpringBoot中通过@Value获取自定义配置的值
场景 在SpringBoot项目中的application.properties中定义变量,要在 controller中获取自定义配置的值. 实现 打开 application.properties ...
- 【SpringBoot零基础案例08】【IEDA 2021.1】SpringBoot获取核心配置文件application.properties中的自定义配置
新建模块 在配置文件中进行自定义的配置 在java代码中使用@Value("${属性名}")来获取自定义配置的值,这个注解的位置不是固定的,可以在任何需要用到自定义值的地方使用 I ...
- springboot跳转html_畅游Spring Boot系列 — 自定义配置
这里要说的自定义配置主要是两类:一类是关于Spring MVC的扩展配置,一类是Spring Boot自身通过配置文件的自定义配置 首先,我们来看一下SpringBoot中关于Spring MVC的相 ...
- SpringBoot和日志框架:缘由,日志框架的选择,使用,自定义配置,日志框架切换
日志框架 缘由 如果像我们初学者,想知道代码运行到哪里了,一般都是会System.out.println() 进行输出到控制台查看代码运行的情况,好知道代码错误在哪里 但是大型的系统里面,如果有很多的 ...
- SpringBoot(2)之自定义配置
2019独角兽企业重金招聘Python工程师标准>>> 覆盖 Spring Boot 自动配置 使用SpringSecurity <dependency><grou ...
最新文章
- 使用 HttpServerUtility.Transfer 方法在同一应用程序的页面间重定向
- 线程池之ScheduledThreadPool学习
- python学习之--安装IDE(eclipse+pydev)
- ffmpeg处理视频命令
- 分账汇总少了一笔 和 对账和商户汇总比基础表少了一笔 问题处理方式
- 苹果iOS 16将改进通知 添加新的健康追踪功能
- 计算机网络—传输层(思维导图)
- Base64编码格式详解
- 个税系统代理服务器参数是什么,个税系统网络参数设置服务器地址
- 杭州车牌摇号规则详细内容
- presenting view controller
- 手机登陆 html,手机登录(登陆)路由器方法
- 你会使用Excel中的【照相机】吗?
- 基于STM32单片机的智能家居毕设
- Jenkins使用经验谈4(创建Job)
- GIS在石油行业中的应用
- 关于 SM4 加秘密解密的工具类 (转载)
- 电脑常用软件,让你的电脑更加便捷的黑科技软件
- Android的数据库 SQLite数据库:SQLite
- HDU 1574 RP问题(DP)