alibaba/spring-ai-alibaba · error · IllegalArgumentException
Dataset ID cannot be null
Error message
Dataset ID cannot be null
What it means
Input validation failure in DatasetVersionServiceImpl.create. A dataset version must reference its parent dataset, so when DatasetVersionCreateRequest.getDatasetId() is null the method throws IllegalArgumentException inside the @Transactional create; this is a generic preconditions guard that rolls back the transaction and prevents an orphan version row from being written. The caller must populate datasetId with an existing dataset's id.
Source
Thrown at spring-ai-alibaba-admin/spring-ai-alibaba-admin-server-start/src/main/java/com/alibaba/cloud/ai/studio/admin/service/impl/DatasetVersionServiceImpl.java:43
import java.util.stream.Collectors;
@Slf4j
@Service
@RequiredArgsConstructor
public class DatasetVersionServiceImpl implements DatasetVersionService {
private final DatasetVersionMapper datasetVersionMapper;
private final DatasetMapper datasetMapper;
private final ExperimentMapper experimentMapper;
@Override
@Transactional
public DatasetVersion create(DatasetVersionCreateRequest request) {
log.info("Creating dataset version: {}", request);
// Validate request
if (request.getDatasetId() == null) {
throw new IllegalArgumentException("Dataset ID cannot be null");
}
//检查 dataset是否存在
if (datasetMapper.selectById(request.getDatasetId()) == null) {
throw new IllegalArgumentException("Dataset not found: " + request.getDatasetId());
}
// 获取当前最大的version
DatasetVersionDO latestDatasetVersionDO = datasetVersionMapper.selectLatestVersion(request.getDatasetId());
String currentVersion = Objects.isNull(latestDatasetVersionDO)?null:latestDatasetVersionDO.getVersion();
// Generate version number
String versionNumber = VersionUtils.generateVersionNumber(currentVersion);
// Build entity
DatasetVersionDO datasetVersionDO = DatasetVersionDO.builder()View on GitHub (pinned to f82da0b50f)
Solutions
- Set datasetId on the request before calling create
- Add @NotNull on the DTO's datasetId for standardized validation
- Fix the JSON key or configure snake_case mapping so datasetId is populated
- Ensure the client resolves a valid dataset id first
Example fix
// before DatasetVersionCreateRequest req = new DatasetVersionCreateRequest(); req.setDatasetItems(items); datasetVersionService.create(req); // after DatasetVersionCreateRequest req = new DatasetVersionCreateRequest(); req.setDatasetId(datasetId); req.setDatasetItems(items); datasetVersionService.create(req);
Defensive patterns
Strategy: validation
Validate before calling
if (req.getDatasetId() == null) { throw new IllegalArgumentException("datasetId is required"); } Type guard
boolean hasDatasetId(DatasetVersionCreateRequest r) { return r != null && r.getDatasetId() != null; } Try / catch
try { versionService.create(req); } catch (IllegalArgumentException e) { return ResponseEntity.badRequest().body("datasetId is required"); } Prevention
- Use @NotNull on the DTO field and @Valid in the controller
- Build requests via a constructor/builder that forces datasetId
- Ensure JSON serialization maps dataset_id/datasetId consistently
When it happens
Trigger: Calling create(DatasetVersionCreateRequest) with datasetId never set; JSON payload missing the datasetId field; DTO field name mismatch during deserialization.
Common situations: Builder/DTO assembled without setting datasetId; front-end form not sending the field; client mapping 'dataset_id' snake_case while the server expects camelCase without a naming strategy.
Related errors
- TOOL_PARAMS_MISSING
- MISSING_PARAMS
- invalid agent dsl: data is null
- ttlUnit cannot be null
- key cannot be null
AI-assisted analysis of alibaba/spring-ai-alibaba@f82da0b50f (2026-09-09).
Data as JSON: /api/errors/9f3771c9a4ab062f.
Report an issue: GitHub.