{"record":{"id":"bd9c9558323d19ea","repo":"alibaba/spring-ai-alibaba","slug":"missing-params-bd9c95","errorCode":"MISSING_PARAMS","errorMessage":"docId","messagePattern":"docId","errorType":"validation","errorClass":"BizException","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/controller/DocumentChunkController.java","lineNumber":68,"sourceCode":"\t/** Service for handling document operations */\n\tprivate final DocumentService documentService;\n\n\tpublic DocumentChunkController(DocumentService documentService) {\n\t\tthis.documentService = documentService;\n\t}\n\n\t/**\n\t * Creates a new document chunk\n\t * @param docId Document ID\n\t * @param chunk Chunk data\n\t * @return Created chunk ID\n\t */\n\t@PostMapping(value = \"/{docId}/chunks\")\n\tpublic Result<String> createDocumentChunk(@PathVariable(\"docId\") String docId, @RequestBody DocumentChunk chunk) {\n\t\tRequestContext context = RequestContextHolder.getRequestContext();\n\n\t\tif (Objects.isNull(docId)) {\n\t\t\tthrow new BizException(ErrorCode.MISSING_PARAMS.toError(\"docId\"));\n\t\t}\n\n\t\tif (Objects.isNull(chunk.getText())) {\n\t\t\tthrow new BizException(ErrorCode.MISSING_PARAMS.toError(\"text\"));\n\t\t}\n\n\t\tchunk.setDocId(docId);\n\t\tString chunkId = documentService.createDocumentChunk(chunk);\n\t\treturn Result.success(context.getRequestId(), chunkId);\n\t}\n\n\t/**\n\t * Updates an existing document chunk\n\t * @param docId Document ID\n\t * @param chunkId Chunk ID\n\t * @param chunk Updated chunk data\n\t */\n\t@PutMapping(\"/{docId}/chunks/{chunkId}\")","sourceCodeStart":50,"sourceCodeEnd":86,"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/controller/DocumentChunkController.java#L50-L86","documentation":"POST /{docId}/chunks (create document chunk) requires the docId path variable, and the controller throws BizException with ErrorCode.MISSING_PARAMS when it is null. Since docId is a path variable, Spring binds it from the URL; a null here means the request hit an unintended route mapping or was built without the path segment.","triggerScenarios":"A request to the chunks creation endpoint whose URL lacks a concrete {docId} segment (e.g. a templated URL like \"/documents//chunks\" or \"/documents/{docId}/chunks\" never interpolated), yielding docId == null.","commonSituations":"URL template not interpolated in client code; empty string path segment; proxy/gateway stripping the segment; calling the endpoint via a hardcoded template string.","solutions":["Interpolate a real document id into the URL path segment, e.g. /documents/{docId}/chunks.","Check client URL-building code for an unexpanded \"${docId}\"-style placeholder.","Verify no gateway rewrite removes the docId path segment."],"exampleFix":"// before\nconst url = `/documents/${docId}/chunks`.replace('${docId}', '')\n// after\nif (!docId) throw new Error('docId required');\nconst url = `/documents/${docId}/chunks`;","handlingStrategy":"validation","validationCode":"if (docId) { fetch(`/documents/${docId}/chunks`, {method:'POST', body: JSON.stringify(chunk)}); }","typeGuard":"const hasDocId = (id) => typeof id === 'string' && id.length > 0;","tryCatchPattern":"try { await createChunk(docId, chunk); } catch (e) { if (e.code === 'MISSING_PARAMS' && e.message === 'docId') { alert('Select a document first'); } else { throw e; } }","preventionTips":["Never call chunk APIs without a resolved parent document id.","Check client URL templates for uninterpolated placeholders.","Assert docId is truthy in an integration test hitting the endpoint."],"tags":["http-api","validation","path-variable","documents"],"backgroundTag":"missing-required-argument","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"}