diff --git a/framework-docs/modules/ROOT/pages/integration/rest-clients.adoc b/framework-docs/modules/ROOT/pages/integration/rest-clients.adoc index 482217e6d62d..a1f45190320d 100644 --- a/framework-docs/modules/ROOT/pages/integration/rest-clients.adoc +++ b/framework-docs/modules/ROOT/pages/integration/rest-clients.adoc @@ -940,7 +940,7 @@ method parameters: | `@RequestHeader` | Add a request header or multiple headers. The argument may be a `Map` or `MultiValueMap` with multiple headers, a `Collection` of values, or an - individual value. Type conversion is supported for non-String values. This overrides + individual value. Type conversion is supported for non-String values. This does not override the annotation's `headers` attribute. | `@PathVariable` diff --git a/spring-web/src/test/java/org/springframework/web/service/invoker/RequestHeaderArgumentResolverTests.java b/spring-web/src/test/java/org/springframework/web/service/invoker/RequestHeaderArgumentResolverTests.java index 537c2a816c1d..5eaa3f9af1a2 100644 --- a/spring-web/src/test/java/org/springframework/web/service/invoker/RequestHeaderArgumentResolverTests.java +++ b/spring-web/src/test/java/org/springframework/web/service/invoker/RequestHeaderArgumentResolverTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2024 the original author or authors. + * Copyright 2002-2025 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -23,6 +23,7 @@ import org.springframework.util.ObjectUtils; import org.springframework.web.bind.annotation.RequestHeader; import org.springframework.web.service.annotation.GetExchange; +import org.springframework.web.service.annotation.HttpExchange; import static org.assertj.core.api.Assertions.assertThat; @@ -32,6 +33,7 @@ * * @author Olga Maciaszek-Sharma * @author Rossen Stoyanchev + * @author Yanming Zhou */ class RequestHeaderArgumentResolverTests { @@ -49,6 +51,12 @@ void header() { assertRequestHeaders("id", "test"); } + @Test + void doesNotOverrideAnnotationHeaders() { + this.service.executeWithAnnotationHeaders("test"); + assertRequestHeaders("id", "default", "test"); + } + private void assertRequestHeaders(String key, String... values) { List actualValues = this.client.getRequestValues().getHeaders().get(key); if (ObjectUtils.isEmpty(values)) { @@ -65,6 +73,9 @@ private interface Service { @GetExchange void execute(@RequestHeader String id); + @HttpExchange(method = "GET", headers = "id=default") + void executeWithAnnotationHeaders(@RequestHeader String id); + } }