{"record":{"id":"5f3fa9ace3051231","repo":"alibaba/spring-ai-alibaba","slug":"invalid-page-number-or-page-size","errorCode":null,"errorMessage":"Invalid page number or page size","messagePattern":"Invalid page number or page size","errorType":"validation","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"warning","filePath":"spring-ai-alibaba-admin/spring-ai-alibaba-admin-server-start/src/main/java/com/alibaba/cloud/ai/studio/admin/service/impl/ExperimentServiceImpl.java","lineNumber":237,"sourceCode":"    public PageResult<ExperimentEvaluatorResultDetail> getResult(ExperimentEvaluatorResultDetailListRequest request){\n\n        // 先检查实验是否存在\n        ExperimentDO experiment = experimentMapper.selectById(request.getExperimentId());\n        if (experiment == null) {\n            log.warn(\"实验不存在: {}\", request.getExperimentId());\n            return null;\n        }\n        if (request.getEvaluatorVersionId() == null) {\n            throw new IllegalArgumentException(\"Evaluator version ID cannot be null\");\n        }\n\n\n        Integer offset = (request.getPageNumber() - 1) * request.getPageSize();\n\n        Integer limit = request.getPageSize();\n\n        if (offset < 0 || limit <= 0) {\n            throw new IllegalArgumentException(\"Invalid page number or page size\");\n        }\n\n\n        Integer totalCount = experimentResultMapper.selectCountByExperimentIdAndEvaluator(request.getExperimentId(), request.getEvaluatorVersionId());\n\n        List<ExperimentResultDO> resultList = experimentResultMapper.selectByExperimentAndEvaluatorWithPageble(request.getExperimentId(),request.getEvaluatorVersionId(),offset,request.getPageSize());\n\n\n        List<ExperimentEvaluatorResultDetail> resultItems = resultList.stream()\n                .map(ExperimentEvaluatorResultDetail::fromDO)\n                .toList();\n\n        return new PageResult<>(\n                (long) totalCount,\n                (long) request.getPageNumber(),\n                (long) request.getPageSize(),\n                resultItems);\n","sourceCodeStart":219,"sourceCodeEnd":255,"githubUrl":"https://github.com/alibaba/spring-ai-alibaba/blob/f82da0b50f35744c13968191be2b1cd2452ef550/spring-ai-alibaba-admin/spring-ai-alibaba-admin-server-start/src/main/java/com/alibaba/cloud/ai/studio/admin/service/impl/ExperimentServiceImpl.java#L219-L255","documentation":"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.","triggerScenarios":"pageNumber = 0 or negative (offset becomes negative), or pageSize = 0 / negative passed in the request.","commonSituations":"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.","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"],"exampleFix":"// before\nInteger offset = (request.getPageNumber() - 1) * request.getPageSize();\n// after\nint pageNumber = Math.max(1, request.getPageNumber());\nint pageSize = Math.max(1, request.getPageSize());\nint offset = (pageNumber - 1) * pageSize;","handlingStrategy":"validation","validationCode":"int page = Math.max(1, request.getPageNumber());\nint size = Math.max(1, Math.min(request.getPageSize(), 100));","typeGuard":"boolean validPaging(Integer pageNumber, Integer pageSize) { return pageNumber != null && pageSize != null && pageNumber >= 1 && pageSize > 0; }","tryCatchPattern":"try { return experimentService.getResult(request); } catch (IllegalArgumentException e) { return fallbackFirstPage(); }","preventionTips":["Initialize pageNumber to 1 (not 0)","Clamp pageSize server- and client-side","Never compute offset from nullable page fields"],"tags":["pagination","argument-validation","out-of-range"],"backgroundTag":"value-out-of-range","analyzedSha":"f82da0b50f35744c13968191be2b1cd2452ef550","analyzedAt":"2026-09-09T15:32:42.421Z","contentChangedAt":"2026-09-09T15:32:42.421Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}