alibaba/spring-ai-alibaba · error · IllegalArgumentException
unsupported app mode: ${param.getMode()}
Error message
unsupported app mode: ${param.getMode()} What it means
Thrown by AppDelegateImpl.create when the requested app mode is not in AppMetadata.SUPPORT_MODES. Only supported modes (e.g. workflow, chatbot) can be created; anything else is rejected before an AppMetadata is built.
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/app/AppDelegateImpl.java:41
import com.alibaba.cloud.ai.studio.admin.builder.generator.model.AppMetadata;
import com.alibaba.cloud.ai.studio.admin.builder.generator.param.CreateAppParam;
import com.alibaba.cloud.ai.studio.admin.builder.generator.saver.AppSaver;
import org.springframework.stereotype.Service;
@Service
public class AppDelegateImpl implements AppDelegate {
private AppSaver appSaver;
public AppDelegateImpl(AppSaver appSaver) {
this.appSaver = appSaver;
}
@Override
public App create(CreateAppParam param) {
if (!Arrays.asList(AppMetadata.SUPPORT_MODES).contains(param.getMode())) {
throw new IllegalArgumentException("unsupported app mode: " + param.getMode());
}
AppMetadata metadata = new AppMetadata().setId(UUID.randomUUID().toString())
.setName(param.getName())
.setMode(param.getMode())
.setDescription(param.getDescription());
App app = new App(metadata, null);
return appSaver.save(app);
}
@Override
public App get(String id) {
return appSaver.get(id);
}
@Override
public List<App> list() {
return appSaver.list();
}View on GitHub (pinned to f82da0b50f)
Solutions
- Set param.setMode() to one of AppMetadata.SUPPORT_MODES (e.g. "workflow" or "chatbot")
- Check AppMetadata.SUPPORT_MODES for the list of accepted values
- Create the app in a supported mode and adapt the workflow instead
Example fix
// before
CreateAppParam p = new CreateAppParam(); p.setMode("agent-chat");
// after
CreateAppParam p = new CreateAppParam(); p.setMode(AppMetadata.CHATBOT_MODE);
Defensive patterns
Strategy: validation
Validate before calling
if (param.getMode() == null || !Arrays.asList(AppMetadata.SUPPORT_MODES).contains(param.getMode())) { throw new IllegalArgumentException("unsupported mode"); } Type guard
boolean isSupportedMode(String mode) { return mode != null && Arrays.asList(AppMetadata.SUPPORT_MODES).contains(mode); } Try / catch
try { delegate.create(param); } catch (IllegalArgumentException e) { return R.fail(400, "mode must be one of " + Arrays.toString(AppMetadata.SUPPORT_MODES)); } Prevention
- Use AppMetadata constants (CHATBOT_MODE/WORKFLOW_MODE) instead of literals
- Validate user-supplied mode in UI/API layer before calling create
- Keep client and server SUPPORT_MODES in sync
When it happens
Trigger: Calling the app-creation API/CreateAppParam with mode set to 'agent', 'completion', or any string outside SUPPORT_MODES.
Common situations: Clients copying modes from other platforms (Dify 'completion'/'agent-chat'), typos, older clients using modes dropped from SUPPORT_MODES.
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
AI-assisted analysis of alibaba/spring-ai-alibaba@f82da0b50f (2026-09-09).
Data as JSON: /api/errors/fb29068ceded96e8.
Report an issue: GitHub.