{"record":{"id":"b803a03ac68d4053","repo":"alibaba/nacos","slug":"10000-b803a0","errorCode":"10000","errorMessage":"required parameter 'nodes' is missing","messagePattern":"required parameter 'nodes' is missing","errorType":"http","errorClass":"NacosApiException","httpStatus":400,"severity":"warning","filePath":"core/src/main/java/com/alibaba/nacos/core/controller/v3/NacosClusterControllerV3.java","lineNumber":114,"sourceCode":"                    \"Illegal state: \" + state);\n            }\n        }\n        return Result.success(nacosClusterOperationService.listNodes(address, nodeState));\n    }\n    \n    /**\n     * Other nodes return their own metadata information.\n     *\n     * @param nodes List of {@link Member}\n     * @return {@link RestResult}\n     */\n    @Since(\"3.0.0\")\n    @PutMapping(value = \"/node/list\")\n    @Secured(action = ActionTypes.WRITE, resource = NACOS_ADMIN_CORE_CONTEXT_V3\n        + \"/cluster\", signType = SignType.CONSOLE, apiType = ApiType.ADMIN_API)\n    public Result<Boolean> updateNodes(@RequestBody List<Member> nodes) throws NacosApiException {\n        if (nodes == null || nodes.isEmpty()) {\n            throw new NacosApiException(HttpStatus.BAD_REQUEST.value(), ErrorCode.PARAMETER_MISSING,\n                \"required parameter 'nodes' is missing\");\n        }\n        return Result.success(nacosClusterOperationService.updateNodes(nodes));\n    }\n    \n    /**\n     * Addressing mode switch.\n     *\n     * @param request {@link LookupUpdateRequest}\n     * @return {@link RestResult}\n     */\n    @Since(\"3.0.0\")\n    @PutMapping(value = \"/lookup\")\n    @Secured(action = ActionTypes.WRITE, resource = NACOS_ADMIN_CORE_CONTEXT_V3\n        + \"/cluster\", signType = SignType.CONSOLE, apiType = ApiType.ADMIN_API)\n    public Result<Boolean> updateLookup(LookupUpdateRequest request) throws NacosException {\n        if (request == null || request.getType() == null) {\n            throw new NacosApiException(HttpStatus.BAD_REQUEST.value(), ErrorCode.PARAMETER_MISSING,","sourceCodeStart":96,"sourceCodeEnd":132,"githubUrl":"https://github.com/alibaba/nacos/blob/9b989acdf181d00898f2e8839257bb2b2a3cefe3/core/src/main/java/com/alibaba/nacos/core/controller/v3/NacosClusterControllerV3.java#L96-L132","documentation":"Thrown by PUT /v3/admin/core/cluster/node/list when the request body (List<Member> nodes) is null or empty. This is a client error: NacosApiException ErrorCode.PARAMETER_MISSING (code 10000), HTTP 400.","triggerScenarios":"Sending the PUT with no body, an empty JSON array '[]', or a body that fails to deserialize as List<Member> (yielding null). The controller explicitly rejects null/empty before delegating to nacosClusterOperationService.updateNodes.","commonSituations":"Console/UI sending an empty selection; a script that posts an empty list; a JSON binding failure when the Content-Type is wrong or the payload shape is incorrect.","solutions":["Provide a non-empty JSON array of Member objects, e.g. [{\"ip\":\"1.2.3.4\",\"port\":7848}].","Set Content-Type: application/json so Spring deserializes the body into List<Member>.","Verify each Member has the required address/port fields."],"exampleFix":"// before\nPUT /v3/admin/core/cluster/node/list\n[]\n\n// after\nPUT /v3/admin/core/cluster/node/list\n[{\"ip\":\"10.0.0.5\",\"port\":7848}]","handlingStrategy":"validation","validationCode":"if (nodes == null || nodes.isEmpty()) {\n    throw new IllegalArgumentException(\"nodes must be a non-empty list\");\n}","typeGuard":null,"tryCatchPattern":"try {\n    client.updateNodes(members);\n} catch (NacosApiException e) {\n    if (e.getErrCode() == ErrorCode.PARAMETER_MISSING.getCode()) { /* empty body */ }\n}","preventionTips":["Always send a non-empty JSON array of Member objects.","Set Content-Type: application/json on the PUT."],"tags":["cluster","validation","parameter-missing","api","bad-request"],"backgroundTag":null,"analyzedSha":"9b989acdf181d00898f2e8839257bb2b2a3cefe3","analyzedAt":"2026-08-14T07:17:31.569Z","schemaVersion":2},"datasetVersion":"2026-08-14T10:17:34.591Z"}