From 8c850db8c417364cb5350a98ea8e31e8699f900c Mon Sep 17 00:00:00 2001 From: 98001yash Date: Fri, 21 Aug 2026 23:11:05 +0530 Subject: [PATCH] Resolve placeholders before parsing request headers Signed-off-by: 98001yash --- .../cloud/openfeign/support/SpringMvcContract.java | 1 + .../cloud/openfeign/valid/ValidFeignClientTests.java | 10 ++++++++++ .../src/test/resources/application.yml | 1 + 3 files changed, 12 insertions(+) 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: '*' ---