You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

HttpComponentsClientHttpRequestFactory不兼容CloseableHttpClient参数求助

解决RestTemplate跳过SSL校验时HttpComponentsClientHttpRequestFactory参数类型不匹配问题

问题根源

你遇到的类型不匹配问题核心是依赖版本冲突:同时引入了Apache HttpClient 5.x(httpclient5)和HttpClient 4.x(httpclient)两个版本的依赖,这两个版本的CloseableHttpClient分属不同包路径,而Spring的HttpComponentsClientHttpRequestFactory默认适配HttpClient 4.x的API,导致参数类型不兼容。


解决方案

提供两种可行方案,按需选择:

方案一:统一使用Apache HttpClient 4.x(推荐,适配现有Spring版本)

  1. 清理依赖:移除HttpClient 5.x的依赖,保留4.x版本
    修改pom.xml,删除以下依赖:
<dependency>
    <groupId>org.apache.httpcomponents.client5</groupId>
    <artifactId>httpclient5</artifactId>
    <version>5.2</version>
</dependency>

确保保留HttpClient 4.x的依赖:

<dependency>
    <groupId>org.apache.httpcomponents</groupId>
    <artifactId>httpclient</artifactId>
    <version>4.5.13</version>
</dependency>
  1. 验证导入:确保SSL相关类为4.x包路径
import org.apache.http.ssl.SSLContextBuilder;
import org.apache.http.conn.ssl.NoopHostnameVerifier;
  1. 原代码可直接运行:此时CloseableHttpClient为4.x类型,与HttpComponentsClientHttpRequestFactory的构造参数完全兼容。

方案二:使用Apache HttpClient 5.x对应的Spring工厂类

如果需要保留HttpClient 5.x,需使用Spring专门适配的工厂类:

  1. 清理依赖:移除所有HttpClient 4.x相关依赖
    修改pom.xml,删除以下依赖:
<dependency>
    <groupId>org.apache.httpcomponents</groupId>
    <artifactId>httpcore</artifactId>
    <version>4.4.13</version>
</dependency>
<dependency>
    <groupId>org.apache.httpcomponents</groupId>
    <artifactId>httpclient</artifactId>
    <version>4.5.13</version>
</dependency>
<dependency>
    <groupId>org.apache.httpcomponents</groupId>
    <artifactId>httpclient-cache</artifactId>
    <version>4.5.13</version>
</dependency>
  1. 调整代码:使用适配HttpClient 5.x的请求工厂类
import org.springframework.http.client.HttpComponentsClient5HttpRequestFactory;
// 其他导入保持不变

SSLContext sslContext = SSLContextBuilder.create()
        .loadTrustMaterial((chain, authType) -> true)
        .build();

CloseableHttpClient httpClient = HttpClients.custom()
        .setSSLContext(sslContext)
        .setSSLHostnameVerifier(NoopHostnameVerifier.INSTANCE)
        .build();

// 替换为HttpClient5专属的工厂类
HttpComponentsClient5HttpRequestFactory factory = new HttpComponentsClient5HttpRequestFactory(httpClient);
RestTemplate restTemplate = new RestTemplate(factory);

重要提醒

跳过SSL证书校验仅适合测试/学校项目场景,生产环境绝对禁止使用,会导致严重的安全风险。

内容的提问来源于stack exchange,提问作者user24824026

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 22:02:19