diff --git a/spring-cloud-openfeign-core/src/main/java/org/springframework/cloud/openfeign/support/SpringMvcContract.java b/spring-cloud-openfeign-core/src/main/java/org/springframework/cloud/openfeign/support/SpringMvcContract.java index 7eb3de263..fa043f352 100644 --- a/spring-cloud-openfeign-core/src/main/java/org/springframework/cloud/openfeign/support/SpringMvcContract.java +++ b/spring-cloud-openfeign-core/src/main/java/org/springframework/cloud/openfeign/support/SpringMvcContract.java @@ -404,6 +404,7 @@ private void parseHeaders(MethodMetadata md, RequestMapping annotation) { // TODO: only supports one header value per key if (annotation.headers() != null) { for (String header : annotation.headers()) { + header = resolve(header); int index = header.indexOf('='); if (!header.contains("!=") && index >= 0) { md.template() diff --git a/spring-cloud-openfeign-core/src/test/java/org/springframework/cloud/openfeign/valid/ValidFeignClientTests.java b/spring-cloud-openfeign-core/src/test/java/org/springframework/cloud/openfeign/valid/ValidFeignClientTests.java index 883d8430e..15c040091 100644 --- a/spring-cloud-openfeign-core/src/test/java/org/springframework/cloud/openfeign/valid/ValidFeignClientTests.java +++ b/spring-cloud-openfeign-core/src/test/java/org/springframework/cloud/openfeign/valid/ValidFeignClientTests.java @@ -185,6 +185,13 @@ void testHeaderPlaceholders() { assertThat(header).as("header was wrong").isEqualTo("myPlaceholderHeaderValue"); } + @Test + void testHeaderPlaceholderExpression() { + String header = testClient.getHelloHeadersPlaceholderExpression(); + assertThat(header).as("header was null").isNotNull(); + assertThat(header).as("header was wrong").isEqualTo("myPlaceholderHeaderValue"); + } + @Test void testFeignClientType() { assertThat(feignClient).isInstanceOf(FeignBlockingLoadBalancerClient.class); @@ -453,6 +460,9 @@ protected interface TestClient { headers = "myPlaceholderHeader=${feignClient.myPlaceholderHeader}") String getHelloHeadersPlaceholders(); + @GetMapping(path = "/helloheadersplaceholders", headers = "${feignClient.placeholderHeader}") + String getHelloHeadersPlaceholderExpression(); + @GetMapping("/helloparams") List getParams(@RequestParam("params") List params); diff --git a/spring-cloud-openfeign-core/src/test/resources/application.yml b/spring-cloud-openfeign-core/src/test/resources/application.yml index fcb7c398f..5db7c0775 100644 --- a/spring-cloud-openfeign-core/src/test/resources/application.yml +++ b/spring-cloud-openfeign-core/src/test/resources/application.yml @@ -20,6 +20,7 @@ feignClient: localappName: localapp methodLevelRequestMappingPath: /hello2 myPlaceholderHeader: myPlaceholderHeaderValue + placeholderHeader: myPlaceholderHeader=myPlaceholderHeaderValue management.endpoints.web.expose: '*' ---