{"record":{"id":"a931a7a46e52716e","repo":"alibaba/spring-ai-alibaba","slug":"error-a931a7","errorCode":null,"errorMessage":"评测集名称不能为空","messagePattern":"评测集名称不能为空","errorType":"validation","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"spring-ai-alibaba-admin/spring-ai-alibaba-admin-server-start/src/main/java/com/alibaba/cloud/ai/studio/admin/service/impl/DatasetServiceImpl.java","lineNumber":48,"sourceCode":"    private DatasetMapper datasetMapper;\n\n    @Resource\n    private DatasetVersionMapper datasetVersionMapper;\n\n\n\n\n    private static final String INPUT_COLUMN_TYPE = \"input\";\n    private static final String REFERENCE_OUTPUT_COLUMN_TYPE = \"reference_output\";\n\n\n    @Override\n    @Transactional\n    public Dataset create(DatasetCreateRequest request) {\n        log.info(\"创建评测集: {}\", request);\n\n        if (!StringUtils.hasText(request.getName())) {\n            throw new IllegalArgumentException(\"评测集名称不能为空\");\n        }\n\n\n        if (request == null || request.getColumnsConfig() == null ||\n                !hasRequiredColumns(request.getColumnsConfig())) {\n            throw new IllegalArgumentException(\"评测集列配置错误，必须包含input和reference_output两列\");\n        }\n\n        DatasetDO datasetDO = DatasetDO.builder()\n                .name(request.getName())\n                .description(request.getDescription())\n                .columnsConfig(JSONObject.toJSONString(request.getColumnsConfig()))\n                .build();\n\n        datasetMapper.insert(datasetDO);\n        log.info(\"评测集创建成功: {}\", datasetDO);\n        return Dataset.fromDO(datasetDO);\n    }","sourceCodeStart":30,"sourceCodeEnd":66,"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/DatasetServiceImpl.java#L30-L66","documentation":"Input validation failure in DatasetServiceImpl.create. The method requires a non-blank dataset name before persisting the new dataset; when DatasetCreateRequest.getName() is null, empty, or whitespace-only, IllegalArgumentException is thrown inside the @Transactional method, rolling back any partial writes. This is a client-side request problem: the caller must supply a name before retrying.","triggerScenarios":"POSTing a DatasetCreateRequest with name omitted, empty string, or whitespace; JSON deserialization leaving name null due to a wrong field name in the payload.","commonSituations":"Front-end form allowing empty submit; API client sending \"title\" instead of \"name\"; automated scripts with partial payloads.","solutions":["Set a non-empty name on DatasetCreateRequest before calling create","Add @NotBlank on the request DTO's name field for earlier, standardized validation","Fix the JSON payload key so it matches the DTO field name","Validate input in the controller with @Valid and return a 400"],"exampleFix":"// before\nDatasetCreateRequest req = new DatasetCreateRequest();\nreq.setDescription(\"eval set\");\ndatasetService.create(req);\n// after\nDatasetCreateRequest req = new DatasetCreateRequest();\nreq.setName(\"my-eval-set\");\nreq.setDescription(\"eval set\");\ndatasetService.create(req);","handlingStrategy":"validation","validationCode":"if (request.getName() == null || request.getName().isBlank()) { throw new IllegalArgumentException(\"name is required\"); }","typeGuard":"boolean hasName(DatasetCreateRequest r) { return r != null && r.getName() != null && !r.getName().isBlank(); }","tryCatchPattern":"try { datasetService.create(req); } catch (IllegalArgumentException e) { return ResponseEntity.badRequest().body(e.getMessage()); }","preventionTips":["Annotate DTO fields with @NotBlank and validate with @Valid","Enforce required-name checks in the UI form before submit","Add contract tests that POST payloads missing required fields"],"tags":["validation","empty-field"],"backgroundTag":"empty-required-field","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"}