当前位置: 首页 > news >正文

RestTemplate 封装 - RestUtils (1)

引入依赖

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpclient</artifactId>
</dependency>

配置restTemplate

@Bean
public RestTemplate getRestTemplate() {try {// 配置后可以使用 httpsTrustStrategy acceptingTrustStrategy = (x509Certificates, em) -> true;SSLContext sslContext = org.apache.http.ssl.SSLContexts.custom().loadTrustMaterial(null, acceptingTrustStrategy).build();SSLConnectionSocketFactory csf = new SSLConnectionSocketFactory(sslContext, new NoopHostnameVerifier());CloseableHttpClient httpClient = HttpClients.custom().setSSLSocketFactory(csf).build();HttpComponentsClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory();requestFactory.setHttpClient(httpClient);return new RestTemplate(requestFactory);} catch (Exception e) {log.error("getRestTemplate error.", e);}return new RestTemplate();
}

创建工具类

@Component
public class RestUtils {@Autowiredprivate RestTemplate restTemplate;/*** 发送 get 请求*     默认:客户端接受 json 类型数据*/public <T> T get(String url, Class<T> responseType) {// 设置默认请求头Map<String, String> httpHeaderMap = new HashMap<>();httpHeaderMap.put(HttpHeaders.ACCEPT, MediaType.APPLICATION_JSON_VALUE);return sendRequest(url, HttpMethod.GET, null, responseType, httpHeaderMap);}/*** 发送 post 请求*    默认:服务器接受 json 类型数据,客户端接受 json 类型数据*/public <T> T post(String url, Object requestBody, Class<T> responseType) {Map<String, String> httpHeaderMap = new HashMap<>();httpHeaderMap.put(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE);httpHeaderMap.put(HttpHeaders.ACCEPT, MediaType.APPLICATION_JSON_VALUE);return sendRequest(url, HttpMethod.POST, requestBody, responseType, httpHeaderMap);}/*** 发送请求* @param method 请求方式*/public <T> T sendRequest(String url, HttpMethod method, Object requestBody, Class<T> responseType, Map<String, String> httpHeaderMap) {HttpHeaders headers = new HttpHeaders();// 设置请求头httpHeaderMap.keySet().forEach(key -> {headers.add(key,httpHeaderMap.get(key));});HttpEntity<Object> entity = new HttpEntity<>(requestBody, headers);return restTemplate.exchange(url, method, entity, responseType).getBody();}/*** 在 url 后面拼接参数* @param url 原请求路径* @param paramMap 参数map*/public String getParamUrl(String url, Map<String, String> paramMap) {StringBuilder sb = new StringBuilder(url);if (paramMap != null && !paramMap.isEmpty()) {sb.append("?");for (Map.Entry<String, String> entry : paramMap.entrySet()) {String key = entry.getKey();String value = entry.getValue();sb.append(key).append("=").append(value).append("&");}sb.deleteCharAt(sb.length() - 1); // 移除最后一个多余的"&"}return sb.toString();}
}

补充:Springboot 3.X,HttpClient 5.0/5.1

<dependency><groupId>org.apache.httpcomponents.client5</groupId><artifactId>httpclient5</artifactId>
</dependency>
import lombok.extern.slf4j.Slf4j;
import org.apache.hc.client5.http.impl.classic.CloseableHttpClient;
import org.apache.hc.client5.http.impl.classic.HttpClients;
import org.apache.hc.client5.http.impl.io.PoolingHttpClientConnectionManager;
import org.apache.hc.client5.http.impl.io.PoolingHttpClientConnectionManagerBuilder;
import org.apache.hc.client5.http.ssl.NoopHostnameVerifier;
import org.apache.hc.client5.http.ssl.SSLConnectionSocketFactory;
import org.apache.hc.client5.http.ssl.TrustAllStrategy;
import org.apache.hc.core5.ssl.SSLContextBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
import org.springframework.web.client.RestTemplate;import javax.net.ssl.SSLContext;
import java.time.Duration;@Slf4j
@Configuration
public class RestConfig {@Beanpublic RestTemplate restTemplate() {try {// 仅测试环境使用:信任所有证书 + 关闭主机名校验SSLContext sslContext = SSLContextBuilder.create().loadTrustMaterial(null, TrustAllStrategy.INSTANCE).build();SSLConnectionSocketFactory sslSocketFactory =new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);// 在连接管理器上设置 SSL Socket Factory(适用于 HttpClient 5.0/5.1)PoolingHttpClientConnectionManager cm =PoolingHttpClientConnectionManagerBuilder.create().setSSLSocketFactory(sslSocketFactory).build();CloseableHttpClient httpClient = HttpClients.custom().setConnectionManager(cm).build();HttpComponentsClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory(httpClient);requestFactory.setConnectTimeout(Duration.ofSeconds(10));requestFactory.setConnectionRequestTimeout(Duration.ofSeconds(10));requestFactory.setReadTimeout(Duration.ofSeconds(30));return new RestTemplate(requestFactory);} catch (Exception e) {log.error("Create RestTemplate error.", e);return new RestTemplate();}}
}
http://www.rkmt.cn/news/122433.html

相关文章:

  • H3C MSR3620-DP系列路由器生产环境配置
  • 恶臭异味检测仪:金叶仪器实现异味精准识别与数据化管理
  • 服务器技术参数怎么写
  • 别花钱找中介,我留学生求职却靠它上岸了!
  • 关键操作:锁相环切换、逆变器控制模式切换
  • 前后端分离短流量数据分析与可视化abo系统|SpringBoot+Vue+MyBatis+MySQL完整源码+部署教程
  • 小团队如何1-2周快速搭建企业级外卖平台?
  • 快速掌握图表定制:新手友好的交互式数据可视化终极指南
  • Unity智能语音交互革命:从技术难题到离线解决方案的探索之旅
  • 踩过坑才懂:前端生成唯一 ID,别用 Date.now ()了!一行代码搞定
  • 用Dify搭建企业级知识库(详细教程)小白到精通,一篇全掌握!
  • 构建敏捷时代的高效能测试团队:理念、架构与实践路径
  • ESD9L5.0ST5G SOD923封装单向低容静电保护器件 DL0501D9 DL0301D9
  • 2025年12月呼和浩特交通事故/婚姻家庭纠纷/民间借贷律师口碑榜单 - 2025年品牌推荐榜
  • 2025十大可下载图片素材网站推荐,找图库素材必看! - 品牌2026
  • vue 甘特图 vxe-gantt table 依赖线的使用,配置连接线
  • 2025十大私藏图库!旅游金融大数据等行业高清素材图库推荐 - 品牌2026
  • OpenCV(二十七):中值滤波 - 详解
  • 【题解】Luogu P10289 [GESP样题 八级] 小杨的旅游
  • 2025年获客系统品牌排行榜,有了它商机线索不用愁 - 品牌策略主理人
  • KOReader完整指南:如何在Kindle等设备上打造完美的电子书阅读体验
  • 国产蒸馏水器/实验室蒸馏水器/全自动蒸馏水器推荐工厂/厂家/制造商 - 品牌推荐大师
  • 最新发布!2025年国内实心钢棒现货厂家TOP5榜单,实心钢棒/不锈钢无缝实心钢棒生产加工怎么选择 - 品牌推荐师
  • 2025年12月U型科氏质量流量计企业推荐:大连美天测控、三角型科氏质量流量计、微弯型科氏质量流量计、直管型科氏质量流量计、科氏质量流量计推荐指南 - 海棠依旧大
  • 群晖DSM系统入门:新手必看的10个设置
  • Day33分辨率与视口与二倍图使用方法
  • 2025年12月切片蜡块柜推荐榜:密集型/高容量密集型/智能/病理/防潮防腐/多层抽屉式/实验室/切片蜡块柜,安全高效存储新标杆,北京中宝元五星领跑实验室装备市场 - 海棠依旧大
  • 2025年12月发膜品牌推荐榜:8秒液体/蛋白/修护/发膜,玛丝兰领衔修护新标杆,从发芯强韧开始,让枯发重获新生 - 海棠依旧大
  • 替代LM74610_120V理想二极管控制器
  • ABAP调用CDS AMDP:数据库存储过程封装