{"record":{"id":"c58aea903e393d08","repo":"alibaba/nacos","slug":"parameter-validate-error-c58aea","errorCode":"PARAMETER_VALIDATE_ERROR","errorMessage":"Request parameter `search` should be `accurate` or `blur`.","messagePattern":"Request parameter `search` should be `accurate` or `blur`\\.","errorType":"exception","errorClass":"NacosApiException","httpStatus":400,"severity":"warning","filePath":"ai/src/main/java/com/alibaba/nacos/ai/form/skills/admin/SkillListForm.java","lineNumber":50,"sourceCode":"    \n    @Serial\n    private static final long serialVersionUID = 1L;\n    \n    private String search;\n    \n    /**\n     * Sort field. Supported values: \"download_count\". Defaults to gmt_modified when null or empty.\n     */\n    private String orderBy;\n    \n    @Override\n    public void validate() throws NacosApiException {\n        fillDefaultNamespaceId();\n        // For list query, skillName is optional\n        if (StringUtils.isNotBlank(search)\n            && !Constants.Skills.SEARCH_ACCURATE.equalsIgnoreCase(search)\n            && !Constants.Skills.SEARCH_BLUR.equalsIgnoreCase(search)) {\n            throw new NacosApiException(NacosApiException.INVALID_PARAM,\n                ErrorCode.PARAMETER_VALIDATE_ERROR,\n                \"Request parameter `search` should be `accurate` or `blur`.\");\n        }\n    }\n    \n    public String getSearch() {\n        return search;\n    }\n    \n    public void setSearch(String search) {\n        this.search = search;\n    }\n    \n    public String getOrderBy() {\n        return orderBy;\n    }\n    \n    public void setOrderBy(String orderBy) {","sourceCodeStart":32,"sourceCodeEnd":68,"githubUrl":"https://github.com/alibaba/nacos/blob/9b989acdf181d00898f2e8839257bb2b2a3cefe3/ai/src/main/java/com/alibaba/nacos/ai/form/skills/admin/SkillListForm.java#L32-L68","documentation":"SkillListForm.validate() guards the skill list query's optional `search` parameter. When non-blank it must case-insensitively equal \"accurate\" or \"blur\" (Constants.Skills.SEARCH_ACCURATE/SEARCH_BLUR). Any other value is an undefined search mode and is rejected with PARAMETER_VALIDATE_ERROR before the query runs. skillName is optional for list, so only search is validated here.","triggerScenarios":"Calling the skill list API with search set to a value other than accurate/blur — e.g. `search=fuzzy`, `search=contains`, `search=exact`. Omitting search is fine.","commonSituations":"Using \"fuzzy\" (the keyword many other search APIs use); UI dropdown emitting \"exact\"; inconsistent naming across Nacos resource types; typo.","solutions":["Set `search=accurate` for exact match or `search=blur` for fuzzy/substring match (case-insensitive).","Omit `search` entirely if no specific mode is needed.","Map \"exact\"->\"accurate\" and \"fuzzy\"->\"blur\" in your client before sending."],"exampleFix":"// before\nGET /v3/admin/ai/skills/list?search=fuzzy\n// after\nGET /v3/admin/ai/skills/list?search=blur","handlingStrategy":"validation","validationCode":"// Before calling skill list\nif (search != null && !search.isBlank()\n    && !\"accurate\".equalsIgnoreCase(search)\n    && !\"blur\".equalsIgnoreCase(search)) {\n    throw new IllegalArgumentException(\"search must be 'accurate', 'blur', or null\");\n}","typeGuard":"// TypeScript\nconst isValidSearch = (s?: string | null): boolean =>\n  s == null || s === \"\" || [\"accurate\",\"blur\"].includes(s.toLowerCase());","tryCatchPattern":"try {\n    form.validate();\n} catch (NacosApiException e) {\n    // invalid search mode\n}","preventionTips":["Whitelist the search dropdown to ['accurate','blur'] in the UI.","Omit search rather than send a guessed keyword.","Share one search-mode helper across prompt/skill/mcp list calls."],"tags":["validation","skill-api","query","parameter-validation"],"backgroundTag":null,"analyzedSha":"9b989acdf181d00898f2e8839257bb2b2a3cefe3","analyzedAt":"2026-08-14T07:17:31.569Z","schemaVersion":2},"datasetVersion":"2026-08-14T10:17:34.591Z"}