alibaba/spring-ai-alibaba · error · InvalidProjectRequestException
Unknown language '${language}' check project metadata
Error message
Unknown language '${language}' check project metadata What it means
validateLanguage() checks the requested language id (e.g. java, kotlin, groovy) against the languages registered in the Initializr metadata. If the id is unknown, an InvalidProjectRequestException('Unknown language ... check project metadata') is thrown. Only language ids present in metadata.getLanguages() are accepted.
Source
Thrown at spring-ai-alibaba-admin/spring-ai-alibaba-admin-server-start/src/main/java/com/alibaba/cloud/ai/studio/admin/builder/generator/service/generator/GraphProjectReqToDescConverter.java:152
private void validateType(String type, InitializrMetadata metadata) {
if (type != null) {
Type typeFromMetadata = metadata.getTypes().get(type);
if (typeFromMetadata == null) {
throw new InvalidProjectRequestException("Unknown type '" + type + "' check project metadata");
}
if (!typeFromMetadata.getTags().containsKey("build")) {
throw new InvalidProjectRequestException(
"Invalid type '" + type + "' (missing build tag) check project metadata");
}
}
}
private void validateLanguage(String language, InitializrMetadata metadata) {
if (language != null) {
DefaultMetadataElement languageFromMetadata = metadata.getLanguages().get(language);
if (languageFromMetadata == null) {
throw new InvalidProjectRequestException("Unknown language '" + language + "' check project metadata");
}
}
}
private void validatePackaging(String packaging, InitializrMetadata metadata) {
if (packaging != null) {
DefaultMetadataElement packagingFromMetadata = metadata.getPackagings().get(packaging);
if (packagingFromMetadata == null) {
throw new InvalidProjectRequestException(
"Unknown packaging '" + packaging + "' check project metadata");
}
}
}
private void validateDependencies(ProjectRequest request, InitializrMetadata metadata) {
List<String> dependencies = request.getDependencies();
dependencies.forEach((dep) -> {
Dependency dependency = metadata.getDependencies().get(dep);View on GitHub (pinned to f82da0b50f)
Solutions
- Use a registered language id such as 'java' or 'kotlin' (list valid ids from the metadata endpoint)
- Register the additional language in initializr.metadata languages configuration
- Fix the typo in the request
Example fix
// before
request.setLanguage("jva");
// after
request.setLanguage("java"); Defensive patterns
Strategy: validation
Validate before calling
if (language != null && !Set.of("java","kotlin","groovy").contains(language)) {
throw new IllegalArgumentException("language '" + language + "' not registered");
} Try / catch
try {
converter.validate(request);
} catch (InvalidProjectRequestException e) {
return ResponseEntity.badRequest().body(e.getMessage());
} Prevention
- Feed language selectors from the metadata endpoint
- Fix typos with shared constants instead of string literals
- Register extra languages in initializr metadata if needed
When it happens
Trigger: Calling validate/convert with ProjectRequest language set to an id not found via metadata.getLanguages().get(language) — e.g. language 'scala' or a typo like 'jva'.
Common situations: Typos in the language parameter, requesting a language the admin generator metadata does not register, stale clients sending removed language ids.
Understand the failure class
Background: Invalid enum value errors: "Unknown type", "Invalid scope", "must be one of" — when a string is not on the library's allowed list — this error's family across 23 libraries.
Related errors
- Unknown type '${type}' check project metadata
- Unknown packaging '${packaging}' check project metadata
- Unknown dependency '${dep}' check project metadata
- Invalid Spring Boot version '${platformVersion}', Spring Boo
- Invalid type '${type}' (missing build tag) check project met
AI-assisted analysis of alibaba/spring-ai-alibaba@f82da0b50f (2026-09-09).
Data as JSON: /api/errors/c1376dac7515eb26.
Report an issue: GitHub.