alibaba/spring-ai-alibaba · warning · IllegalArgumentException

Evaluator version ID cannot be null

Error message

Evaluator version ID cannot be null

What it means

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.

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:228

                    .evaluatorVersionId(evaluatorVersionId)
                    .progress(progress)
                    .completeItemsCount(completeItemsCount)
                    .totalItemsCount(finalDataCount)
                    .build();
        }).collect(ArrayList::new, ArrayList::add, ArrayList::addAll);
    }

    @Override
    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()

View on GitHub (pinned to f82da0b50f)

Solutions

  1. Set request.evaluatorVersionId from the selected evaluator version before calling getResult
  2. Fix property-name mismatches in the client JSON payload
  3. Add @NotNull validation on the request DTO so the API returns 400 automatically
  4. Handle the null case in the UI by prompting the user to select a version

Example fix

// before
ExperimentResultRequest req = new ExperimentResultRequest();
req.setExperimentId(experimentId);
experimentService.getResult(req); // throws
// after
if (evaluatorVersionId == null) {
    throw new IllegalArgumentException("evaluatorVersionId is required");
}
req.setEvaluatorVersionId(evaluatorVersionId);
Defensive patterns

Strategy: validation

Validate before calling

if (request.getExperimentId() == null || request.getEvaluatorVersionId() == null) throw new IllegalArgumentException("experimentId and evaluatorVersionId are required");

Type guard

boolean resultQueryReady(ExperimentResultRequest r) { return r != null && r.getExperimentId() != null && r.getEvaluatorVersionId() != null; }

Try / catch

try { return experimentService.getResult(request); } catch (IllegalArgumentException e) { throw new ResponseStatusException(HttpStatus.BAD_REQUEST, e.getMessage()); }

Prevention

When it happens

Trigger: 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.

Common situations: 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.

Understand the failure class

Background: "missing required argument" and "the following required arguments were not provided": what required-argument errors mean and how to fix them — this error's family across 20 libraries.

Related errors


AI-assisted analysis of alibaba/spring-ai-alibaba@f82da0b50f (2026-09-09). Data as JSON: /api/errors/e47294d20e5c16e5. Report an issue: GitHub.