diff --git a/core/src/main/java/feign/RequestTemplate.java b/core/src/main/java/feign/RequestTemplate.java index 7309cdfa1..f5c5022a9 100644 --- a/core/src/main/java/feign/RequestTemplate.java +++ b/core/src/main/java/feign/RequestTemplate.java @@ -728,6 +728,36 @@ public RequestTemplate header(String name, Iterable values) { return appendHeader(name, values); } + /** + * @see RequestTemplate#headerLiteral(String, Iterable) + */ + public RequestTemplate headerLiteral(String name, String... values) { + if (values == null) { + return headerLiteral(name, Collections.emptyList()); + } + + return headerLiteral(name, Arrays.asList(values)); + } + + /** + * Specify a Header, with the specified values. Values are treated as literals. Template + * expressions are not resolved. + * + * @param name of the header. + * @param values for this header. + * @return a RequestTemplate for chaining. + */ + public RequestTemplate headerLiteral(String name, Iterable values) { + if (name == null || name.isEmpty()) { + throw new IllegalArgumentException("name is required."); + } + if (values == null) { + values = Collections.emptyList(); + } + + return appendHeader(name, values, true); + } + /** * Clear on reader from {@link RequestTemplate} * diff --git a/core/src/test/java/feign/RequestTemplateTest.java b/core/src/test/java/feign/RequestTemplateTest.java index c8d29a4b2..4c40b6ad0 100644 --- a/core/src/test/java/feign/RequestTemplateTest.java +++ b/core/src/test/java/feign/RequestTemplateTest.java @@ -246,6 +246,26 @@ void resolveTemplateWithHeaderEmptyResult() { assertThat(template).hasNoHeader("Encoded"); } + @Test + void templateWithEmptyJsonObjectLiteralHeader() { + String emptyJsonObject = "{}"; + RequestTemplate template = + new RequestTemplate().method(HttpMethod.GET).headerLiteral("A-Header", emptyJsonObject); + + template.resolve(new LinkedHashMap<>()); + assertThat(template).hasHeaders(entry("A-Header", Collections.singletonList(emptyJsonObject))); + } + + @Test + void templateWithTemplateExpressionLiteralHeader() { + String header = "{var}"; + RequestTemplate template = + new RequestTemplate().method(HttpMethod.GET).headerLiteral("A-Header", header); + + template = template.resolve(mapOf("var", "value")); + assertThat(template).hasHeaders(entry("A-Header", Collections.singletonList(header))); + } + @Test void resolveTemplateWithMixedRequestLineParams() { RequestTemplate template = new RequestTemplate().method(HttpMethod.GET)//