• 起因

在工作中,涉及到导出的功能,由于导出和搜索的结果是相同的,所以导出和搜索是同一接口。但由于搜索的分页是每页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的自定义配置相关推荐

  1. 【SpringBoot零基础案例09】【IEDA 2021.1】SpringBoot将核心配置文件中的自定义配置映射到一个对象

    使用@Value注解获取核心配置文件中的值时只能是一个一个的获取,如果在配置文件中有多个对象需要用到名称一样的配置,如name.age等属性,则需要区分是这个属性是哪个对象的.因此可以将这些配置映射到 ...

  2. springboot分页pageable实现简单实用

    方便后期使用分页记录一下 springboot项目+mybatis实现 1.导入java包 pom.xml <!--集成分页--><dependency><groupId ...

  3. c#分页_使用Kotlin搭配Springboot开发RESTFul接口(二)自定义配置、跨域、分页

    前言 上一篇文章请看这里:使用Kotlin搭配Springboot开发RESTFul接口与服务部署 上一篇文章介绍了Kotlin搭配Springboot的开发流程,从搭建项目.ORM.Controll ...

  4. pageable设置size_总结SpringBoot使用Pageable实现分页源码

    之前写过一篇mybatis-plus的文章,但是有朋友说技术太过简单了,想让我写一下分页什么的技术,这里想跟大家解释一下:因为刚开始在这种平台上写文章,确实是写的慢,并且,有些技术我自己也没怎么使用过 ...

  5. SpringBoot中通过@Value获取自定义配置的值

    场景 在SpringBoot项目中的application.properties中定义变量,要在 controller中获取自定义配置的值. 实现 打开 application.properties ...

  6. 【SpringBoot零基础案例08】【IEDA 2021.1】SpringBoot获取核心配置文件application.properties中的自定义配置

    新建模块 在配置文件中进行自定义的配置 在java代码中使用@Value("${属性名}")来获取自定义配置的值,这个注解的位置不是固定的,可以在任何需要用到自定义值的地方使用 I ...

  7. springboot跳转html_畅游Spring Boot系列 — 自定义配置

    这里要说的自定义配置主要是两类:一类是关于Spring MVC的扩展配置,一类是Spring Boot自身通过配置文件的自定义配置 首先,我们来看一下SpringBoot中关于Spring MVC的相 ...

  8. SpringBoot和日志框架:缘由,日志框架的选择,使用,自定义配置,日志框架切换

    日志框架 缘由 如果像我们初学者,想知道代码运行到哪里了,一般都是会System.out.println() 进行输出到控制台查看代码运行的情况,好知道代码错误在哪里 但是大型的系统里面,如果有很多的 ...

  9. SpringBoot(2)之自定义配置

    2019独角兽企业重金招聘Python工程师标准>>> 覆盖 Spring Boot 自动配置 使用SpringSecurity <dependency><grou ...

最新文章

  1. 使用 HttpServerUtility.Transfer 方法在同一应用程序的页面间重定向
  2. 线程池之ScheduledThreadPool学习
  3. python学习之--安装IDE(eclipse+pydev)
  4. ffmpeg处理视频命令
  5. 分账汇总少了一笔 和 对账和商户汇总比基础表少了一笔 问题处理方式
  6. 苹果iOS 16将改进通知 添加新的健康追踪功能
  7. 计算机网络—传输层(思维导图)
  8. Base64编码格式详解
  9. 个税系统代理服务器参数是什么,个税系统网络参数设置服务器地址
  10. 杭州车牌摇号规则详细内容
  11. presenting view controller
  12. 手机登陆 html,手机登录(登陆)路由器方法
  13. 你会使用Excel中的【照相机】吗?
  14. 基于STM32单片机的智能家居毕设
  15. Jenkins使用经验谈4(创建Job)
  16. GIS在石油行业中的应用
  17. 关于 SM4 加秘密解密的工具类 (转载)
  18. 电脑常用软件,让你的电脑更加便捷的黑科技软件
  19. Android的数据库 SQLite数据库:SQLite
  20. HDU 1574 RP问题(DP)

热门文章

  1. HackRF One—GSM嗅探
  2. 真正零首付来了 -- 有了新的融资渠道
  3. 畸变(Distortion)
  4. 第十二章:项目采购管理 - (12.2 实施采购)
  5. Vue项目实现在线预览pdf,并且可以批量打印pdf
  6. 创业日志(六)人间正道是沧桑
  7. 17.C语言进阶——深度理解指针
  8. Python Centry异常邮件预警
  9. 乐视android系统耗电量,乐视手机Max续航能力怎么样?待机时间怎么样?
  10. 基于ssm的鲜花植物商城管理系统