Auto-detect Reactor Netty client in RestClient

Closes gh-33635
This commit is contained in:
rstoyanchev
2024-10-08 07:09:56 +01:00
parent a84a41fa43
commit 000b8a699c

View File

@@ -37,6 +37,7 @@ import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
import org.springframework.http.client.InterceptingClientHttpRequestFactory;
import org.springframework.http.client.JdkClientHttpRequestFactory;
import org.springframework.http.client.JettyClientHttpRequestFactory;
import org.springframework.http.client.ReactorClientHttpRequestFactory;
import org.springframework.http.client.SimpleClientHttpRequestFactory;
import org.springframework.http.client.observation.ClientRequestObservationConvention;
import org.springframework.http.converter.ByteArrayHttpMessageConverter;
@@ -75,6 +76,8 @@ final class DefaultRestClientBuilder implements RestClient.Builder {
private static final boolean jettyClientPresent;
private static final boolean reactorNettyClientPresent;
private static final boolean jdkClientPresent;
// message factories
@@ -99,6 +102,7 @@ final class DefaultRestClientBuilder implements RestClient.Builder {
httpComponentsClientPresent = ClassUtils.isPresent("org.apache.hc.client5.http.classic.HttpClient", loader);
jettyClientPresent = ClassUtils.isPresent("org.eclipse.jetty.client.HttpClient", loader);
reactorNettyClientPresent = ClassUtils.isPresent("reactor.netty.http.client.HttpClient", loader);
jdkClientPresent = ClassUtils.isPresent("java.net.http.HttpClient", loader);
jackson2Present = ClassUtils.isPresent("com.fasterxml.jackson.databind.ObjectMapper", loader) &&
@@ -463,6 +467,9 @@ final class DefaultRestClientBuilder implements RestClient.Builder {
else if (jettyClientPresent) {
return new JettyClientHttpRequestFactory();
}
else if (reactorNettyClientPresent) {
return new ReactorClientHttpRequestFactory();
}
else if (jdkClientPresent) {
// java.net.http module might not be loaded, so we can't default to the JDK HttpClient
return new JdkClientHttpRequestFactory();