Skip to content

Commit d835fe3

Browse files
committed
Do not send null HTTP header value in JdkClientHttpRequest
Prior to this commit, the `JdkClientHttpRequest` would add all values from `HttpHeaders` to the native request builder. This could cause `NullPointerException` being thrown at runtime because the `HttpClient` does not support that. This commit replicates a fix that was applied to the `SimpleClientHttpRequest`, turning null values into empty "". Fixes gh-35996
1 parent 0eefac2 commit d835fe3

File tree

2 files changed

+24
-1
lines changed

2 files changed

+24
-1
lines changed

spring-web/src/main/java/org/springframework/http/client/JdkClientHttpRequest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -175,7 +175,7 @@ private HttpRequest buildRequest(HttpHeaders headers, @Nullable Body body) {
175175
headers.forEach((headerName, headerValues) -> {
176176
if (!DISALLOWED_HEADERS.contains(headerName.toLowerCase(Locale.ROOT))) {
177177
for (String headerValue : headerValues) {
178-
builder.header(headerName, headerValue);
178+
builder.header(headerName, (headerValue != null) ? headerValue : "");
179179
}
180180
}
181181
});

spring-web/src/test/java/org/springframework/web/client/RestClientIntegrationTests.java

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1024,6 +1024,29 @@ void defaultHeaders(ClientHttpRequestFactory requestFactory) throws IOException
10241024
expectRequest(request -> assertThat(request.getHeaders().get("foo")).isEqualTo("bar"));
10251025
}
10261026

1027+
1028+
@ParameterizedRestClientTest
1029+
void sendNullHeaderValue(ClientHttpRequestFactory requestFactory) throws IOException {
1030+
startServer(requestFactory);
1031+
1032+
prepareResponse(builder -> builder
1033+
.setHeader("Content-Type", "text/plain").body("Hello Spring!"));
1034+
1035+
String result = this.restClient.get()
1036+
.uri("/greeting")
1037+
.httpRequest(request -> request.getHeaders().add("X-Test-Header", null))
1038+
.retrieve()
1039+
.body(String.class);
1040+
1041+
assertThat(result).isEqualTo("Hello Spring!");
1042+
1043+
expectRequestCount(1);
1044+
expectRequest(request -> {
1045+
assertThat(request.getHeaders().get("X-Test-Header")).isNullOrEmpty();
1046+
assertThat(request.getTarget()).isEqualTo("/greeting");
1047+
});
1048+
}
1049+
10271050
@ParameterizedRestClientTest
10281051
void defaultRequest(ClientHttpRequestFactory requestFactory) throws IOException {
10291052
startServer(requestFactory);

0 commit comments

Comments
 (0)