Skip to content

Commit b9c4eb6

Browse files
committed
Fix incorrect HttpHeader handling in RequestHeaderParameterProcessor
1 parent af621b6 commit b9c4eb6

File tree

2 files changed

+17
-1
lines changed

2 files changed

+17
-1
lines changed

spring-cloud-openfeign-core/src/main/java/org/springframework/cloud/openfeign/annotation/RequestHeaderParameterProcessor.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
import feign.MethodMetadata;
2525

2626
import org.springframework.cloud.openfeign.AnnotatedParameterProcessor;
27+
import org.springframework.http.HttpHeaders;
2728
import org.springframework.web.bind.annotation.RequestHeader;
2829

2930
import static feign.Util.checkState;
@@ -51,7 +52,7 @@ public boolean processArgument(AnnotatedParameterContext context, Annotation ann
5152
Class<?> parameterType = method.getParameterTypes()[parameterIndex];
5253
MethodMetadata data = context.getMethodMetadata();
5354

54-
if (Map.class.isAssignableFrom(parameterType)) {
55+
if (Map.class.isAssignableFrom(parameterType) || HttpHeaders.class.isAssignableFrom(parameterType)) {
5556
checkState(data.headerMapIndex() == null, "Header map can only be present once.");
5657
data.headerMapIndex(parameterIndex);
5758

spring-cloud-openfeign-core/src/test/java/org/springframework/cloud/openfeign/support/SpringMvcContractTests.java

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@
4545
import org.springframework.format.annotation.NumberFormat;
4646
import org.springframework.format.number.NumberStyleFormatter;
4747
import org.springframework.format.support.FormattingConversionServiceFactoryBean;
48+
import org.springframework.http.HttpHeaders;
4849
import org.springframework.http.MediaType;
4950
import org.springframework.http.ResponseEntity;
5051
import org.springframework.util.MultiValueMap;
@@ -642,6 +643,17 @@ void testProcessHeaderMap() throws Exception {
642643
assertThat(headers.get("aHeader").iterator().next()).isEqualTo("{aHeader}");
643644
}
644645

646+
@Test
647+
void testProcessHttpHeaders() throws Exception {
648+
Method method = TestTemplate_HeaderMap.class.getDeclaredMethod("httpHeaders", HttpHeaders.class);
649+
MethodMetadata data = contract.parseAndValidateMetadata(method.getDeclaringClass(), method);
650+
651+
assertThat(data.template().url()).isEqualTo("/httpHeaders");
652+
assertThat(data.template().method()).isEqualTo("GET");
653+
assertThat(data.headerMapIndex()).isNotNull();
654+
assertThat(data.headerMapIndex().intValue()).isEqualTo(0);
655+
}
656+
645657
@Test
646658
void testProcessHeaderMapMoreThanOnce() throws Exception {
647659
Method method = TestTemplate_HeaderMap.class.getDeclaredMethod("headerMapMoreThanOnce", MultiValueMap.class,
@@ -913,6 +925,9 @@ public interface TestTemplate_HeaderMap {
913925
String headerMap(@RequestHeader MultiValueMap<String, String> headerMap,
914926
@RequestHeader(name = "aHeader") String aHeader);
915927

928+
@GetMapping("/httpHeaders")
929+
String httpHeaders(@RequestHeader HttpHeaders headers);
930+
916931
@GetMapping("/headerMapMoreThanOnce")
917932
String headerMapMoreThanOnce(@RequestHeader MultiValueMap<String, String> headerMap1,
918933
@RequestHeader MultiValueMap<String, String> headerMap2);

0 commit comments

Comments
 (0)