{"record":{"id":"fb29068ceded96e8","repo":"alibaba/spring-ai-alibaba","slug":"unsupported-app-mode-param-getmode","errorCode":null,"errorMessage":"unsupported app mode: ${param.getMode()}","messagePattern":"unsupported app mode: (.+?)","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/builder/generator/service/app/AppDelegateImpl.java","lineNumber":41,"sourceCode":"import com.alibaba.cloud.ai.studio.admin.builder.generator.model.AppMetadata;\nimport com.alibaba.cloud.ai.studio.admin.builder.generator.param.CreateAppParam;\nimport com.alibaba.cloud.ai.studio.admin.builder.generator.saver.AppSaver;\n\nimport org.springframework.stereotype.Service;\n\n@Service\npublic class AppDelegateImpl implements AppDelegate {\n\n\tprivate AppSaver appSaver;\n\n\tpublic AppDelegateImpl(AppSaver appSaver) {\n\t\tthis.appSaver = appSaver;\n\t}\n\n\t@Override\n\tpublic App create(CreateAppParam param) {\n\t\tif (!Arrays.asList(AppMetadata.SUPPORT_MODES).contains(param.getMode())) {\n\t\t\tthrow new IllegalArgumentException(\"unsupported app mode: \" + param.getMode());\n\t\t}\n\t\tAppMetadata metadata = new AppMetadata().setId(UUID.randomUUID().toString())\n\t\t\t.setName(param.getName())\n\t\t\t.setMode(param.getMode())\n\t\t\t.setDescription(param.getDescription());\n\t\tApp app = new App(metadata, null);\n\t\treturn appSaver.save(app);\n\t}\n\n\t@Override\n\tpublic App get(String id) {\n\t\treturn appSaver.get(id);\n\t}\n\n\t@Override\n\tpublic List<App> list() {\n\t\treturn appSaver.list();\n\t}","sourceCodeStart":23,"sourceCodeEnd":59,"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/builder/generator/service/app/AppDelegateImpl.java#L23-L59","documentation":"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.","triggerScenarios":"Calling the app-creation API/CreateAppParam with mode set to 'agent', 'completion', or any string outside SUPPORT_MODES.","commonSituations":"Clients copying modes from other platforms (Dify 'completion'/'agent-chat'), typos, older clients using modes dropped from SUPPORT_MODES.","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"],"exampleFix":"// before\nCreateAppParam p = new CreateAppParam(); p.setMode(\"agent-chat\");\n// after\nCreateAppParam p = new CreateAppParam(); p.setMode(AppMetadata.CHATBOT_MODE);\n","handlingStrategy":"validation","validationCode":"if (param.getMode() == null || !Arrays.asList(AppMetadata.SUPPORT_MODES).contains(param.getMode())) { throw new IllegalArgumentException(\"unsupported mode\"); }","typeGuard":"boolean isSupportedMode(String mode) { return mode != null && Arrays.asList(AppMetadata.SUPPORT_MODES).contains(mode); }","tryCatchPattern":"try { delegate.create(param); } catch (IllegalArgumentException e) { return R.fail(400, \"mode must be one of \" + Arrays.toString(AppMetadata.SUPPORT_MODES)); }","preventionTips":["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"],"tags":["invalid-enum-value","app-creation","validation"],"backgroundTag":"invalid-enum-value","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"}