Spring Framework 6 支持 Apache HttpClient 4.x 已从 HttpComponentsClientHttpRequestFactory.依赖于该工厂的组件,如 RestTemplate 现在必须使用 Apache HttpClient 5.x,它使用 org.apache.hc.* 。
任何使用 HttpClient 4.x 类,如 CloseableHttpClient, HttpClient, RequestConfig,或 HttpContext 从 org.apache.http.* Spring 的 HTTP 客户端基础架构中的软件包(包括构造函数、方法调用或配置,涉及 HttpComponentsClientHttpRequestFactory) 会导致编译错误,必须更新以使用 HttpClient 5.x 等价物。
查看以下方法和构造函数 HttpComponentsClientHttpRequestFactory 以确保它们不引用 HttpClient 4.x API:
HttpComponentsClientHttpRequestFactory(HttpClient)setHttpClient(HttpClient)getHttpClient()mergeRequestConfig(RequestConfig)postProcessHttpRequest(HttpUriRequest)createHttpUriRequest(HttpMethod, URI)createHttpContext(HttpMethod, URI)createRequestConfig(Object)setHttpContextFactory(BiFunction)下面的示例显示了将被标记的无效用法:
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
import org.springframework.web.client.RestTemplate;
public class InvalidHttp4ClientUsage {
public void example() {
CloseableHttpClient client = HttpClients.custom().build();
RestTemplate restTemplate = new RestTemplate(new HttpComponentsClientHttpRequestFactory(client));
}
}
下面的示例显示了有效的迁移用法:
import org.apache.hc.client5.http.impl.classic.CloseableHttpClient;
import org.apache.hc.client5.http.impl.classic.HttpClients;
import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
import org.springframework.web.client.RestTemplate;
public class ValidHttpClientUsage {
public void example() {
CloseableHttpClient client = HttpClients.custom().build();
RestTemplate restTemplate = new RestTemplate(new HttpComponentsClientHttpRequestFactory(client));
}
}
有关更多信息,请参阅以下资源: