JdkClientHttpRequest does not support Content-Length 0
This commit ensures the correct HttpRequest.BodyPublisher is used with Content-Length 0. Closes gh-31451
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2023-2023 the original author or authors.
|
||||
* Copyright 2002-2023 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.
|
||||
@@ -129,9 +129,12 @@ class JdkClientHttpRequest extends AbstractStreamingClientHttpRequest {
|
||||
BYTE_MAPPER, this.executor);
|
||||
|
||||
long contentLength = headers.getContentLength();
|
||||
if (contentLength != -1) {
|
||||
if (contentLength > 0) {
|
||||
return HttpRequest.BodyPublishers.fromPublisher(outputStreamPublisher, contentLength);
|
||||
}
|
||||
else if (contentLength == 0) {
|
||||
return HttpRequest.BodyPublishers.noBody();
|
||||
}
|
||||
else {
|
||||
return HttpRequest.BodyPublishers.fromPublisher(outputStreamPublisher);
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2023-2023 the original author or authors.
|
||||
* Copyright 2002-2023 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.
|
||||
@@ -24,6 +24,7 @@ import org.junit.jupiter.api.BeforeAll;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import org.springframework.http.HttpMethod;
|
||||
import org.springframework.http.HttpStatus;
|
||||
import org.springframework.http.HttpStatusCode;
|
||||
import org.springframework.lang.Nullable;
|
||||
|
||||
@@ -67,7 +68,7 @@ public class JdkClientHttpRequestFactoryTests extends AbstractHttpRequestFactory
|
||||
|
||||
@Test
|
||||
public void customizeDisallowedHeaders() throws IOException {
|
||||
ClientHttpRequest request = factory.createRequest(URI.create(this.baseUrl + "/status/299"), HttpMethod.PUT);
|
||||
ClientHttpRequest request = this.factory.createRequest(URI.create(this.baseUrl + "/status/299"), HttpMethod.PUT);
|
||||
request.getHeaders().set("Expect", "299");
|
||||
|
||||
try (ClientHttpResponse response = request.execute()) {
|
||||
@@ -75,4 +76,14 @@ public class JdkClientHttpRequestFactoryTests extends AbstractHttpRequestFactory
|
||||
}
|
||||
}
|
||||
|
||||
@Test // gh-31451
|
||||
public void contentLength0() throws IOException {
|
||||
BufferingClientHttpRequestFactory bufferingFactory = new BufferingClientHttpRequestFactory(this.factory);
|
||||
ClientHttpRequest request = bufferingFactory.createRequest(URI.create(this.baseUrl + "/methods/get"), HttpMethod.GET);
|
||||
|
||||
try (ClientHttpResponse response = request.execute()) {
|
||||
assertThat(response.getStatusCode()).as("Invalid response status").isEqualTo(HttpStatus.OK);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user