{"record":{"id":"f6a7e2ac5fdb7069","repo":"OpenFeign/feign","slug":"name-is-required-f6a7e2","errorCode":null,"errorMessage":"name is required.","messagePattern":"name is required\\.","errorType":"exception","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"core/src/main/java/feign/template/QueryTemplate.java","lineNumber":77,"sourceCode":"\n  /**\n   * Create a new Query Template.\n   *\n   * @param name of the query parameter.\n   * @param values in the template.\n   * @param charset for the template.\n   * @param collectionFormat to use.\n   * @param decodeSlash if slash characters should be decoded\n   * @return a QueryTemplate\n   */\n  public static QueryTemplate create(\n      String name,\n      Iterable<String> values,\n      Charset charset,\n      CollectionFormat collectionFormat,\n      boolean decodeSlash) {\n    if (Util.isBlank(name)) {\n      throw new IllegalArgumentException(\"name is required.\");\n    }\n\n    if (values == null) {\n      throw new IllegalArgumentException(\"values are required\");\n    }\n\n    /* remove all empty values from the array */\n    Collection<String> remaining =\n        StreamSupport.stream(values.spliterator(), false)\n            .filter(Util::isNotBlank)\n            .collect(Collectors.toList());\n\n    return new QueryTemplate(name, remaining, charset, collectionFormat, decodeSlash);\n  }\n\n  /**\n   * Append a value to the Query Template.\n   *","sourceCodeStart":59,"sourceCodeEnd":95,"githubUrl":"https://github.com/OpenFeign/feign/blob/e2a1e27560a1e68840c34f031afca88b36096e30/core/src/main/java/feign/template/QueryTemplate.java#L59-L95","documentation":"QueryTemplate.create() builds a query-string template from a name, values, charset, collection format, and slash-encoding option. It validates the name first with Util.isBlank and throws IllegalArgumentException('name is required.') when the name is null, empty, or whitespace-only. A query parameter must have a name to be rendered in the URL.","triggerScenarios":"Calling QueryTemplate.create(null/\"\"/\" \", values, ...) directly, or indirectly via RequestTemplate.query(name, values) / append() when a query parameter name resolved to blank — e.g. from a custom Contract or @QueryMap with empty keys, or annotation value placeholders that expanded to empty.","commonSituations":"Custom Client/Contract implementations constructing query templates programmatically; @QueryMap maps with empty-string keys; interface methods with blank annotation values (e.g. @RequestLine(\"GET /?=\")).","solutions":["Ensure every query parameter name passed to RequestTemplate.query / QueryTemplate.create is a non-blank string before invoking.","Filter entries of a @QueryMap (or any Map used for query params) to skip keys that are null/empty/whitespace.","Check the interface method's annotations: fix blank @RequestLine or query annotation values at the source."],"exampleFix":"// before\nrequestTemplate.query(param.getKey(), Collections.singletonList(param.getValue())); // key may be blank\n// after\nif (!Util.isBlank(param.getKey())) {\n  requestTemplate.query(param.getKey(), Collections.singletonList(param.getValue()));\n}","handlingStrategy":"validation","validationCode":"if (Util.isBlank(name)) {\n  throw new IllegalArgumentException(\"query parameter name must not be blank\");\n}\nrequestTemplate.query(name, values);","typeGuard":"static boolean isUsableParamName(String name) {\n  return name != null && !name.trim().isEmpty();\n}","tryCatchPattern":"try {\n  requestTemplate.query(name, values);\n} catch (IllegalArgumentException e) {\n  throw new ConfigException(\"Blank query parameter name in request template\", e);\n}","preventionTips":["Sanitize @QueryMap keys: filter out null/blank entries before applying.","Review @RequestLine and query annotations for blank names.","Use Util.isBlank (already in feign-core) at every query-parameter construction site."],"tags":["java","feign","query-string","null-argument","request-template"],"backgroundTag":"missing-required-argument","analyzedSha":"e2a1e27560a1e68840c34f031afca88b36096e30","analyzedAt":"2026-09-10T12:37:37.238Z","contentChangedAt":"2026-09-10T12:37:37.238Z","schemaVersion":2},"datasetVersion":"2026-09-16T09:17:16.951Z"}