alibaba/spring-ai-alibaba · warning · IllegalArgumentException
Invalid page number or page size
Error message
Invalid page number or page size
What it means
Thrown by ExperimentServiceImpl.getResult after computing offset = (pageNumber-1)*pageSize: if offset < 0 or pageSize <= 0 the paging parameters are invalid. This guards the SQL LIMIT/OFFSET query from nonsensical values.
Source
Thrown at spring-ai-alibaba-admin/spring-ai-alibaba-admin-server-start/src/main/java/com/alibaba/cloud/ai/studio/admin/service/impl/ExperimentServiceImpl.java:237
public PageResult<ExperimentEvaluatorResultDetail> getResult(ExperimentEvaluatorResultDetailListRequest request){
// 先检查实验是否存在
ExperimentDO experiment = experimentMapper.selectById(request.getExperimentId());
if (experiment == null) {
log.warn("实验不存在: {}", request.getExperimentId());
return null;
}
if (request.getEvaluatorVersionId() == null) {
throw new IllegalArgumentException("Evaluator version ID cannot be null");
}
Integer offset = (request.getPageNumber() - 1) * request.getPageSize();
Integer limit = request.getPageSize();
if (offset < 0 || limit <= 0) {
throw new IllegalArgumentException("Invalid page number or page size");
}
Integer totalCount = experimentResultMapper.selectCountByExperimentIdAndEvaluator(request.getExperimentId(), request.getEvaluatorVersionId());
List<ExperimentResultDO> resultList = experimentResultMapper.selectByExperimentAndEvaluatorWithPageble(request.getExperimentId(),request.getEvaluatorVersionId(),offset,request.getPageSize());
List<ExperimentEvaluatorResultDetail> resultItems = resultList.stream()
.map(ExperimentEvaluatorResultDetail::fromDO)
.toList();
return new PageResult<>(
(long) totalCount,
(long) request.getPageNumber(),
(long) request.getPageSize(),
resultItems);
View on GitHub (pinned to f82da0b50f)
Solutions
- Clamp pageNumber to a minimum of 1 and pageSize to a positive value (e.g. 1..100) on the client
- Default uninitialized pageNumber/pageSize to 1 and a sane page size before sending
- Validate the request DTO with @Min(1) constraints so Spring returns 400 early
Example fix
// before Integer offset = (request.getPageNumber() - 1) * request.getPageSize(); // after int pageNumber = Math.max(1, request.getPageNumber()); int pageSize = Math.max(1, request.getPageSize()); int offset = (pageNumber - 1) * pageSize;
Defensive patterns
Strategy: validation
Validate before calling
int page = Math.max(1, request.getPageNumber()); int size = Math.max(1, Math.min(request.getPageSize(), 100));
Type guard
boolean validPaging(Integer pageNumber, Integer pageSize) { return pageNumber != null && pageSize != null && pageNumber >= 1 && pageSize > 0; } Try / catch
try { return experimentService.getResult(request); } catch (IllegalArgumentException e) { return fallbackFirstPage(); } Prevention
- Initialize pageNumber to 1 (not 0)
- Clamp pageSize server- and client-side
- Never compute offset from nullable page fields
When it happens
Trigger: pageNumber = 0 or negative (offset becomes negative), or pageSize = 0 / negative passed in the request.
Common situations: Client initializing pageNumber to 0 instead of 1; a computed pageSize that becomes 0 after an empty filter; integer parsing of an empty string yielding 0; frontend pagination bug sending page=-1 on refresh.
Understand the failure class
Background: "value must be between 0 and 1" / "out of range" / "must not be negative" errors: fixing range-validation failures across open-source libraries — this error's family across 42 libraries.
Related errors
- oss object name is invalid
- Experiment ID cannot be null
- Evaluator version ID cannot be null
- threadId is not allow null
- threadId isn't allow null
AI-assisted analysis of alibaba/spring-ai-alibaba@f82da0b50f (2026-09-09).
Data as JSON: /api/errors/5f3fa9ace3051231.
Report an issue: GitHub.