{"record":{"id":"e47294d20e5c16e5","repo":"alibaba/spring-ai-alibaba","slug":"evaluator-version-id-cannot-be-null","errorCode":null,"errorMessage":"Evaluator version ID cannot be null","messagePattern":"Evaluator version ID cannot be null","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":228,"sourceCode":"                    .evaluatorVersionId(evaluatorVersionId)\n                    .progress(progress)\n                    .completeItemsCount(completeItemsCount)\n                    .totalItemsCount(finalDataCount)\n                    .build();\n        }).collect(ArrayList::new, ArrayList::add, ArrayList::addAll);\n    }\n\n    @Override\n    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()","sourceCodeStart":210,"sourceCodeEnd":246,"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#L210-L246","documentation":"Thrown by ExperimentServiceImpl.getResult when request.getEvaluatorVersionId() is null. Fetching paged experiment results requires both an experiment ID and an evaluator version ID, and this guard rejects the missing version before paging math runs.","triggerScenarios":"Submitting a result-query request whose evaluatorVersionId field was never set — e.g. client omitted the field, bound the wrong DTO property, or the UI did not select an evaluator version.","commonSituations":"Frontend filter form submitted without choosing an evaluator version; JSON payload using a mismatched property name (evaluatorId vs evaluatorVersionId); older API clients predating the field.","solutions":["Set request.evaluatorVersionId from the selected evaluator version before calling getResult","Fix property-name mismatches in the client JSON payload","Add @NotNull validation on the request DTO so the API returns 400 automatically","Handle the null case in the UI by prompting the user to select a version"],"exampleFix":"// before\nExperimentResultRequest req = new ExperimentResultRequest();\nreq.setExperimentId(experimentId);\nexperimentService.getResult(req); // throws\n// after\nif (evaluatorVersionId == null) {\n    throw new IllegalArgumentException(\"evaluatorVersionId is required\");\n}\nreq.setEvaluatorVersionId(evaluatorVersionId);","handlingStrategy":"validation","validationCode":"if (request.getExperimentId() == null || request.getEvaluatorVersionId() == null) throw new IllegalArgumentException(\"experimentId and evaluatorVersionId are required\");","typeGuard":"boolean resultQueryReady(ExperimentResultRequest r) { return r != null && r.getExperimentId() != null && r.getEvaluatorVersionId() != null; }","tryCatchPattern":"try { return experimentService.getResult(request); } catch (IllegalArgumentException e) { throw new ResponseStatusException(HttpStatus.BAD_REQUEST, e.getMessage()); }","preventionTips":["Require evaluator version selection in the UI before querying results","Match DTO property names exactly in client payloads","Add @NotNull on the request DTO fields"],"tags":["null","argument-validation","experiment-results"],"backgroundTag":"missing-required-argument","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"}