[英]java.lang.IllegalArgumentException: fromIndex(x) > toIndex(y)
我將列表轉換為頁面以顯示帶有分頁的候選人表,但我收到錯誤 java.lang.IllegalArgumentException: fromIndex(5) > toIndex(1),請問如何解決這個問題?
public Page<CandidatesDetailsDto> filterCandidates(Integer page, Integer pageSize) {
page = (page == null || page < 1) ? 0 : page - 1;
pageSize = (pageSize == null || pageSize < 1) ? 10 : pageSize;
PageRequest pageRequest = new PageRequest(page, pageSize);
List<CandidatesEntity> candidatesEntityList2 = candidatesService.findAll(pageRequest);
int start = (int) pageRequest.getOffset();
int end = (start + pageRequest.getPageSize()) > candidatesEntityList2.size() ? candidatesEntityList2.size() : (start + pageRequest.getPageSize());
candidatesEntity = new PageImpl<CandidatesEntity>(candidatesEntityList2.subList(start, end), pageRequest, candidatesEntityList2.size());
}
return candidatesEntity.map(source -> candidatesDetailsConverter.convertTo(source));
}
發生此異常是因為在計算切片的開始時,您沒有考慮完整的候選列表中有多少對象。
如果我從您的方法中請求大小為 5 的第 1 頁,但您只有 2 個候選人,請看看會發生什么:
int page = 1;
int pageOffset = 5; // page * pageSize
List<Candidate> all = Arrays.asList(customer1);
int start = 5; // = pageOffset
int end = 1; // Math.min(start, all.size()); because min(5, 1) == 1.
Page<Candidates> page = new PageImpl(all.subList(start, end)); // this is what throws
當有人向您請求不存在的頁面時,您必須特別考慮這種情況。 在這種情況下,您必須返回一個空頁面或null
或其他內容,但重要的是它必須在不同的代碼路徑上處理。
所以,這里有一些幾乎可以工作的代碼:你必須自己實現nonExistentPage
方法。
public Page<CandidatesDetailsDto> filterCandidates(Integer page, Integer pageSize) {
page = (page == null || page < 1) ? 0 : page - 1;
pageSize = (pageSize == null || pageSize < 1) ? 10 : pageSize;
PageRequest pageRequest = new PageRequest(page, pageSize);
List<CandidatesEntity> candidatesEntityList2 = candidatesService.findAll(pageRequest);
int start = (int) pageRequest.getOffset();
if (start <= candidatesEntityList2.size()) {
return nonExistentPage(candidatesEntityList2.size()); // important part here
}
int end = Math.min(start + pageRequest.getPageSize(), candidatesEntityList2.size());
candidatesEntity = new PageImpl<CandidatesEntity>(candidatesEntityList2.subList(start, end), pageRequest, candidatesEntityList2.size());
return candidatesEntity.map(source -> candidatesDetailsConverter.convertTo(source));
}
/*
* Implement this yourself: you must convey to the user that the page
* he requested from you does not exist.
*/
private abstract Page<CandidatesDetailsDto> nonExistentPage(int fullListSize);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.