起因仕事では、導出機能に関し、導出と検索の結果は同じであるため、導出と検索は同じインターフェースである.しかし、検索ページは各ページ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);
}
はフロントエンドから渡されたpage sizeによって改ページサイズを設定しています.使用中に、pageのsizeがどれだけ大きいかにかかわらず、最大2000本しか導き出せないことが分かりました.ソースの中で最大値の制限があるかもしれません.このようにソースコードを追跡します.カスタムページ構成により、カスタムsizeが最大10000 であることを解決します.
/**
* 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 = "_";
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;
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));
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();
pageSize = pageSize < 1 ? defaultOrFallback.getPageSize() : pageSize;
pageSize = pageSize > maxPageSize ? maxPageSize : pageSize;
Sort sort = sortResolver.resolveArgument(methodParameter, mavContainer, webRequest, binderFactory);
sort = sort == null && defaultOrFallback != null ? defaultOrFallback.getSort() : sort;
return new PageRequest(page, pageSize, sort);
}
}