pageable设置size_SpringBoot分页Pageable 自定义配置最大size

起因

在工作中,涉及到导出的功能,由于导出和搜索的结果是相同的,所以导出和搜索是同一接口。但由于搜索的分页是每页10条,而导出却是没有条数限制的,所以引出下面的问题

controller方法如下:

@PostMapping("/orders/search")

public Page 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最大2000

private 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 最大2000

private int maxPageSize = DEFAULT_MAX_PAGE_SIZE;

@Override

public 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 bound

pageSize = 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 configured

sort = 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;

@Override

public void addArgumentResolvers(List 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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值