{"record":{"id":"d62124db4000b64c","repo":"OpenFeign/feign","slug":"name-is-required","errorCode":null,"errorMessage":"name is required.","messagePattern":"name is required\\.","errorType":"validation","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"core/src/main/java/feign/RequestTemplate.java","lineNumber":741,"sourceCode":"   */\n  public RequestTemplate header(String name, String... values) {\n    if (values == null) {\n      return appendHeader(name, Collections.emptyList());\n    }\n\n    return header(name, Arrays.asList(values));\n  }\n\n  /**\n   * Specify a Header, with the specified values. Values can be literals or template expressions.\n   *\n   * @param name of the header.\n   * @param values for this header.\n   * @return a RequestTemplate for chaining.\n   */\n  public RequestTemplate header(String name, Iterable<String> values) {\n    if (name == null || name.isEmpty()) {\n      throw new IllegalArgumentException(\"name is required.\");\n    }\n    if (values == null) {\n      values = Collections.emptyList();\n    }\n\n    return appendHeader(name, values);\n  }\n\n  /**\n   * @see RequestTemplate#headerLiteral(String, Iterable)\n   */\n  public RequestTemplate headerLiteral(String name, String... values) {\n    if (values == null) {\n      return headerLiteral(name, Collections.emptyList());\n    }\n\n    return headerLiteral(name, Arrays.asList(values));\n  }","sourceCodeStart":723,"sourceCodeEnd":759,"githubUrl":"https://github.com/OpenFeign/feign/blob/e2a1e27560a1e68840c34f031afca88b36096e30/core/src/main/java/feign/RequestTemplate.java#L723-L759","documentation":"RequestTemplate.header(String, Iterable<String>) requires a non-empty header name. This IllegalArgumentException is thrown when the name is null or the empty string; it guards against building HTTP requests with malformed headers.","triggerScenarios":"Calling template.header(null, values) or template.header(\"\", values); also reached from custom Contract/interceptor code that derives header names from annotations that are blank.","commonSituations":"Blank @Headers annotation values, configuration-driven header names that are empty, string splitting producing empty names (e.g. ': value'), typos in header map keys.","solutions":["Supply a valid non-empty header name","Validate/trim header names before calling header()","Fix the annotation or config source producing the blank name","Skip adding the header entirely when the name is blank"],"exampleFix":"// before\ntemplate.header(\"\", Collections.singletonList(\"application/json\"));\n// after\nif (name != null && !name.isEmpty()) {\n  template.header(name, Collections.singletonList(\"application/json\"));\n}","handlingStrategy":"validation","validationCode":"if (name == null || name.trim().isEmpty()) {\n  throw new IllegalArgumentException(\"Header name must be non-empty\");\n}","typeGuard":null,"tryCatchPattern":"try {\n  template.header(name, values);\n} catch (IllegalArgumentException e) {\n  if (\"name is required.\".equals(e.getMessage())) {\n    LOGGER.warn(\"Skipping blank header name\");\n  } else { throw e; }\n}","preventionTips":["Null/empty-check header names before adding","Trim names parsed from 'Name: value' strings","Validate @Headers annotation values in custom contracts","Never derive header names from unvalidated external config"],"tags":["java","feign-client","headers","invalid-argument"],"backgroundTag":"empty-required-field","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"}