Polishing JdkClientHttpRequestFactory
This commit is contained in:
@@ -24,6 +24,7 @@ import java.net.http.HttpClient;
|
||||
import java.net.http.HttpRequest;
|
||||
import java.net.http.HttpResponse;
|
||||
import java.nio.ByteBuffer;
|
||||
import java.time.Duration;
|
||||
import java.util.List;
|
||||
import java.util.concurrent.Executor;
|
||||
import java.util.concurrent.Flow;
|
||||
@@ -58,12 +59,17 @@ class JdkClientHttpRequest extends AbstractStreamingClientHttpRequest {
|
||||
|
||||
private final Executor executor;
|
||||
|
||||
@Nullable
|
||||
private final Duration timeOut;
|
||||
|
||||
public JdkClientHttpRequest(HttpClient httpClient, URI uri, HttpMethod method, Executor executor) {
|
||||
|
||||
public JdkClientHttpRequest(HttpClient httpClient, URI uri, HttpMethod method, Executor executor,
|
||||
@Nullable Duration readTimeout) {
|
||||
this.httpClient = httpClient;
|
||||
this.uri = uri;
|
||||
this.method = method;
|
||||
this.executor = executor;
|
||||
this.timeOut = readTimeout;
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -98,6 +104,10 @@ class JdkClientHttpRequest extends AbstractStreamingClientHttpRequest {
|
||||
HttpRequest.Builder builder = HttpRequest.newBuilder()
|
||||
.uri(this.uri);
|
||||
|
||||
if (this.timeOut != null) {
|
||||
builder.timeout(this.timeOut);
|
||||
}
|
||||
|
||||
headers.forEach((headerName, headerValues) -> {
|
||||
if (!headerName.equalsIgnoreCase(HttpHeaders.CONTENT_LENGTH)) {
|
||||
if (!DISALLOWED_HEADERS.contains(headerName.toLowerCase())) {
|
||||
|
||||
@@ -19,10 +19,12 @@ package org.springframework.http.client;
|
||||
import java.io.IOException;
|
||||
import java.net.URI;
|
||||
import java.net.http.HttpClient;
|
||||
import java.time.Duration;
|
||||
import java.util.concurrent.Executor;
|
||||
|
||||
import org.springframework.core.task.SimpleAsyncTaskExecutor;
|
||||
import org.springframework.http.HttpMethod;
|
||||
import org.springframework.lang.Nullable;
|
||||
import org.springframework.util.Assert;
|
||||
|
||||
|
||||
@@ -40,6 +42,9 @@ public class JdkClientHttpRequestFactory implements ClientHttpRequestFactory {
|
||||
|
||||
private final Executor executor;
|
||||
|
||||
@Nullable
|
||||
private Duration readTimeout;
|
||||
|
||||
|
||||
/**
|
||||
* Create a new instance of the {@code JdkClientHttpRequestFactory}
|
||||
@@ -74,9 +79,20 @@ public class JdkClientHttpRequestFactory implements ClientHttpRequestFactory {
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Set the underlying {@code HttpClient}'s read timeout (in milliseconds).
|
||||
* A timeout value of 0 specifies an infinite timeout.
|
||||
* <p>Default is the system's default timeout.
|
||||
* @see java.net.http.HttpRequest.Builder#timeout
|
||||
*/
|
||||
public void setReadTimeout(int readTimeout) {
|
||||
this.readTimeout = Duration.ofMillis(readTimeout);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public ClientHttpRequest createRequest(URI uri, HttpMethod httpMethod) throws IOException {
|
||||
return new JdkClientHttpRequest(this.httpClient, uri, httpMethod, this.executor);
|
||||
return new JdkClientHttpRequest(this.httpClient, uri, httpMethod, this.executor, this.readTimeout);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user