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

Spring之HTTP客户端--RestTemplate的使用

原文网址:Spring之HTTP客户端--RestTemplate的使用_IT利刃出鞘的博客-CSDN博客

简介

本文介绍RestTemplate的用法。RestTemplate是Spring自带的HTTP客户端,推荐使用。

项目中经常需要使用http调用第三方的服务,常用的客户端如下:

  1. HttpURLConnection(JDK的)
  2. HttpClient(Apache的)
  3. OkHttp(Square的)

上边这几个客户端用起来比较麻烦,代码量比较多,而且要注意资源回收问题。Spring提供了一个简单便捷的工具类,它就是RestTemplate。RestTemplate的底层默认是HttpURLConnection(JDK),可以切换为其他客户端,比如:HttpClient(Apache的)、OkHttp(Square的)。

引入依赖

只需引入spring-boot-starter-web即可,它里边包含了RestTemplate。

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

配置类

法1:最简配置

@Configuration
public class RestTemplateConfig {@Beanpublic RestTemplate getRestTemplate() {return new RestTemplate();}
}

这种初始化方法,是使用了JDK自带的HttpURLConnection作为底层HTTP客户端实现。 

法2:自定义客户端及超时等

建议自定义配置,原因如下:

  1. 从性能及易用程度来看,OkHttp 优于 HttpClient、HttpClient优于HttpURLConnection。
  2. 超期时间,请求连接时间等是HTTP客户端必须要设置的,要支持配置。

RestTemplate工具提供两种配置方式。

  1. RestTemplate类
    1. 优点:可以便捷创建一些错误处理拦截、添加默认请求参数等。
  2. RestTemplateBuilder
    1. 优点:可以便捷设置连接超时和读超时
    2. Spring已默认将RestTemplateBuilder装配为了Bean,直接使用即可。
package com.knife.example.common.config;import okhttp3.OkHttpClient;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.web.client.RestTemplateBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.client.ClientHttpRequestFactory;
import org.springframework.http.client.OkHttp3ClientHttpRequestFactory;
import org.springframework.web.client.RestTemplate;import java.time.Duration;@Configuration
public class RestTemplateConfig {@Value("${custom.restTemplate.connectTimeout:1s}")private Duration connectTimeout;@Value("${custom.restTemplate.readTimeout:1s}")private Duration readTimeout;@Beanpublic RestTemplate restTemplate(RestTemplateBuilder restTemplateBuilder){RestTemplate restTemplate = restTemplateBuilder.requestFactory(this::getClientHttpRequestFactory).setConnectTimeout(connectTimeout).setReadTimeout(readTimeout)// 响应异常处理。应用场景:响应状态200是正常,可以做统一的非200响应码的拦截// .errorHandler(ResponseErrorHandler errorHandler)// 设置请求拦截。应用场景:添加一些全局的请求头等。可创建多个,执行顺序和list中对象的顺序一致。// .interceptors(List<ClientHttpRequestInterceptor> interceptors)// 设置信息转换对象。应用场景:设置一些编码格式、数据类型、json/xml等的类型转换器等。// .messageConverters(List<HttpMessageConverter<?>> messageConverters)// 配置一个扩展uri模板的策略。应用场景:添加一些统一的请求前缀等。// .uriTemplateHandler(UriTemplateHandler handler).build();return restTemplate;}/*** 使用OkHttpClient作为底层客户端(要引入okhttp依赖:com.squareup.okhttp3:okhttp:xxx)*/private ClientHttpRequestFactory getClientHttpRequestFactory(){// 这里设置超时时间是无效的,以外边的restTemplateBuilder.setXxxTimeout为准OkHttpClient okHttpClient = new OkHttpClient.Builder()// .connectTimeout(5, TimeUnit.SECONDS)// .readTimeout(5, TimeUnit.SECONDS)// .writeTimeout(5, TimeUnit.SECONDS).build();return new OkHttp3ClientHttpRequestFactory(okHttpClient);}// /**//  * 使用HttpClient作为底层客户端(要引入httpclient依赖:org.apache.httpcomponents:httpclient:xxx)//  */// private ClientHttpRequestFactory getClientHttpRequestFactory() {//     //这里设置超时时间是无效的,以外边的restTemplateBuilder.setXxxTimeout为准//     RequestConfig config = RequestConfig.custom()//             // 单位都是:毫秒//             .setConnectTimeout(2000)//             .setConnectionRequestTimeout(1000)//             .setSocketTimeout(1000)//             .build();//     CloseableHttpClient client = HttpClientBuilder//             .create()//             .setDefaultRequestConfig(config)//             .build();////     return new HttpComponentsClientHttpRequestFactory(client);// }}

使用

注入RestTemplate即可。

上边是文章的部分内容,为便于维护,全文已转移到此网址:Spring之HTTP客户端-RestTemplate的使用 - 自学精灵

相关文章:

Spring之HTTP客户端--RestTemplate的使用

原文网址&#xff1a;Spring之HTTP客户端--RestTemplate的使用_IT利刃出鞘的博客-CSDN博客 简介 本文介绍RestTemplate的用法。RestTemplate是Spring自带的HTTP客户端&#xff0c;推荐使用。 项目中经常需要使用http调用第三方的服务&#xff0c;常用的客户端如下&#xff1…...

vscode和pycharm在当前工作目录的不同|python获取当前文件目录和当前工作目录

问题背景 相信大家都遇到过一个问题&#xff1a;一个项目在vscode&#xff08;或pycharm&#xff09;明明可以正常运行&#xff0c;但当在pycharm&#xff08;或vscode&#xff09;中时&#xff0c;却经常会出现路径错误。起初&#xff0c;对于这个问题&#xff0c;我也是一知…...

速盾:海外高防CDN有哪些优势?

海外高防CDN&#xff08;Content Delivery Network&#xff09;是一种通过部署分布式节点服务器来加速网站内容分发的技术&#xff0c;它能够提供更快速、稳定、安全的网站访问体验。相比于传统的CDN服务&#xff0c;海外高防CDN具有以下几个优势&#xff1a; 全球分布&#xf…...

OpenCV视觉分析之目标跟踪(4)目标跟踪类TrackerDaSiamRPN的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 cv::TrackerDaSiamRPN 是 OpenCV 中用于目标跟踪的一个类&#xff0c;它实现了 DaSiam RPN&#xff08;Deformable Siamese Region Proposal Net…...

自动对焦爬山算法原理

自动对焦爬山算法原理可以归纳为以下几个关键步骤&#xff1a; &#xff08;1&#xff09;初始化&#xff1a; 爬山算法从一个随机或预设的初始位置开始&#xff0c;这个位置代表了镜头的初始焦距。 &#xff08;2&#xff09;清晰度评价&#xff1a; 算法首先在当前焦距下捕…...

Hyperledger Fabric有那些核心技术,和其他区块链对比Hyperledger Fabric有那些优势

Hyperledger Fabric是一个模块化、权限化的企业级区块链平台&#xff0c;与比特币、以太坊等公有链相比&#xff0c;Fabric主要为私有链或联盟链设计&#xff0c;适用于企业应用。它包含多项核心技术&#xff0c;使其在企业级区块链应用中具有独特优势。以下是Fabric的核心技术…...

「Mac畅玩鸿蒙与硬件8」鸿蒙开发环境配置篇8 - 应用依赖与资源管理

本篇将介绍如何在 HarmonyOS 项目中高效管理资源文件和依赖&#xff0c;以确保代码结构清晰并提升应用性能。资源管理涉及图片、字符串、多语言文件等&#xff0c;通过优化文件加载和依赖管理&#xff0c;可以显著提升项目的加载速度和运行效率。 关键词 资源管理应用依赖优化…...

【Gorm】传统sql的增删查改,通过go去操作sql

MySQL中的建库&#xff0c;建表&#xff0c;删库&#xff0c;删表&#xff0c;添加记录&#xff0c;查询&#xff0c;删除记录&#xff0c;更新记录这些命令是一定要回的&#xff0c;就算我们脱离 orm 这些&#xff0c;也能直接连接上数据库进行操作。 一、数据库的操作 # 查…...

HTML小阶段二维表和思维导图

下面是对标签、元素、属性的对比二维表&#xff0c;通过对比3w1h&#xff08;what是什么、where用在哪、why为什么要用、how如何用&#xff09;来学习区分学习标签、元素、属性 标签 元素 属性 what &#xff08;Tags&#xff09;标签是用来标记内容块或标明元素内容意义 …...

AI与低代码的碰撞:企业数字化转型的新引擎

引言 在当今的商业环境中&#xff0c;企业数字化转型已从选择题变成了必答题。面对日益复杂的市场竞争和不断变化的客户需求&#xff0c;传统的开发模式常常显得力不从心——开发周期冗长、技术门槛高、成本居高不下&#xff0c;企业很难快速响应市场变化。而在这种背景下&…...

HarmonyOS应用开发者基础认证——初级闯关习题参考答案大全

相关文章 HarmonyOS应用开发者中级认证——中级闯关习题参考答案大全 HarmonyOS应用开发者高级认证——高级闯关习题参考答案大全 文章目录 HarmonyOS第一课 HarmonyOS介绍判断题单选题多选题 HarmonyOS第一课 DevEco Studio的使用判断题单选题多选题 HarmonyOS第一课 ArkTS语法…...

Vue背景图片自适应大屏与小屏

1&#xff0c;父绝子相 效果是台式看的更多&#xff0c;笔记本看部分。但是图片不会变形 <div class"father" style"width:100%; position:relative"> <img src"test.png" class"son" style"width:1920px; position:a…...

MongoDB 8.0.3版本安装教程

MongoDB 8.0.3版本安装教程 一、下载安装 1.进入官网 2.选择社区版 3.点击下载 4.下载完成后点击安装 5.同意协议&#xff0c;下一步 6.选择第二个Custon&#xff0c;自定义安装 7.选择安装路径 &#xff01;记住安装路径 8.默认&#xff0c;下一步 9.取…...

【C语言】预处理(预编译)详解(下)(C语言最终篇)

文章目录 一、#和##1.#运算符2.##运算符 二、预处理指令#undef三、条件编译1.单分支条件编译2.多分支条件编译3.判断符号是否被定义4.判断符号是否没有被定义 四、头文件的包含1.库头文件的包含2.本地头文件的包含3.嵌套包含头文件的解决方法使用条件编译指令使用预处理指令#pr…...

[Linux] linux 软硬链接与动静态库

标题&#xff1a;[Linux] linux 软硬链接与动静态库 个人主页水墨不写bug &#xff08;图片来源于网络&#xff09; /** _oo0oo_* o8888888o* 88" . "88* (| -_- |)* …...

GitHub Actions的 CI/CD

GitHub Actions 是一个强大的 CI/CD 工具&#xff0c;适用于自动化各种开发任务。GitHub Actions 的原理是基于事件驱动的自动化流水线工具&#xff0c;通过定义触发条件和执行步骤&#xff0c;可以让项目在特定条件下自动运行一系列操作&#xff0c;比如构建、测试、部署等。 …...

doris 表结构批量导出

导出 test 数据库中的 table1 表&#xff1a;mysqldump -h127.0.0.1 -P9030 -uroot --no-tablespaces --databases test --tables table1 导出 test 数据库中的 table1 表结构&#xff1a;mysqldump -h127.0.0.1 -P9030 -uroot --no-tablespaces --databases test --tables tab…...

linux查看文件命令

查看文件命令 显示命令 cat 语法&#xff1a;cat 【选项】 文件 选项 命令含义n显示行号包括空行b显示行号不包括空行s压缩空行为一行A显示隐藏字符 cat -n 文件&#xff1a;显示行号包括空行 cat -b 文件 cat -s 文件 cat -A 文件 more和less是 分页查看 tac和rev都…...

【2023工业图像异常检测文献】DiAD: 基于扩散模型的多类异常检测方法

DiAD: A Diffusion-based Framework for Multi-class Anomaly Detection 1、Background 当前主流的三种异常检测方法&#xff1a; 基于合成的方法&#xff1a;在正常图像上合成异常&#xff0c;通过训练模型识别这些合成的异常来提高检测和定位能力。基于嵌入的方法&#xff…...

三相继电保护机 继电器保护校验仪 微机继电保护测试仪

性能特点 电压电流输出灵活组合 输出达4相电压3相电流&#xff0c;可各种组合实现常规4相电压3相电流型输出模式&#xff0c;既可兼容传统的各种试验方式&#xff0c;也可方便地进行三相变压器差动试验和厂用电快切和备自投试验。 操作方式装置直接外接笔记本电脑或台式机进行…...

RestClient

什么是RestClient RestClient 是 Elasticsearch 官方提供的 Java 低级 REST 客户端&#xff0c;它允许HTTP与Elasticsearch 集群通信&#xff0c;而无需处理 JSON 序列化/反序列化等底层细节。它是 Elasticsearch Java API 客户端的基础。 RestClient 主要特点 轻量级&#xff…...

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…...

java_网络服务相关_gateway_nacos_feign区别联系

1. spring-cloud-starter-gateway 作用&#xff1a;作为微服务架构的网关&#xff0c;统一入口&#xff0c;处理所有外部请求。 核心能力&#xff1a; 路由转发&#xff08;基于路径、服务名等&#xff09;过滤器&#xff08;鉴权、限流、日志、Header 处理&#xff09;支持负…...

Qt/C++开发监控GB28181系统/取流协议/同时支持udp/tcp被动/tcp主动

一、前言说明 在2011版本的gb28181协议中&#xff0c;拉取视频流只要求udp方式&#xff0c;从2016开始要求新增支持tcp被动和tcp主动两种方式&#xff0c;udp理论上会丢包的&#xff0c;所以实际使用过程可能会出现画面花屏的情况&#xff0c;而tcp肯定不丢包&#xff0c;起码…...

【HarmonyOS 5.0】DevEco Testing:鸿蒙应用质量保障的终极武器

——全方位测试解决方案与代码实战 一、工具定位与核心能力 DevEco Testing是HarmonyOS官方推出的​​一体化测试平台​​&#xff0c;覆盖应用全生命周期测试需求&#xff0c;主要提供五大核心能力&#xff1a; ​​测试类型​​​​检测目标​​​​关键指标​​功能体验基…...

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility 1. 实验室环境1.1 实验室环境1.2 小测试 2. The Endor System2.1 部署应用2.2 检查现有策略 3. Cilium 策略实体3.1 创建 allow-all 网络策略3.2 在 Hubble CLI 中验证网络策略源3.3 …...

跨链模式:多链互操作架构与性能扩展方案

跨链模式&#xff1a;多链互操作架构与性能扩展方案 ——构建下一代区块链互联网的技术基石 一、跨链架构的核心范式演进 1. 分层协议栈&#xff1a;模块化解耦设计 现代跨链系统采用分层协议栈实现灵活扩展&#xff08;H2Cross架构&#xff09;&#xff1a; 适配层&#xf…...

【Zephyr 系列 10】实战项目:打造一个蓝牙传感器终端 + 网关系统(完整架构与全栈实现)

🧠关键词:Zephyr、BLE、终端、网关、广播、连接、传感器、数据采集、低功耗、系统集成 📌目标读者:希望基于 Zephyr 构建 BLE 系统架构、实现终端与网关协作、具备产品交付能力的开发者 📊篇幅字数:约 5200 字 ✨ 项目总览 在物联网实际项目中,**“终端 + 网关”**是…...

Go 并发编程基础:通道(Channel)的使用

在 Go 中&#xff0c;Channel 是 Goroutine 之间通信的核心机制。它提供了一个线程安全的通信方式&#xff0c;用于在多个 Goroutine 之间传递数据&#xff0c;从而实现高效的并发编程。 本章将介绍 Channel 的基本概念、用法、缓冲、关闭机制以及 select 的使用。 一、Channel…...

【JVM面试篇】高频八股汇总——类加载和类加载器

目录 1. 讲一下类加载过程&#xff1f; 2. Java创建对象的过程&#xff1f; 3. 对象的生命周期&#xff1f; 4. 类加载器有哪些&#xff1f; 5. 双亲委派模型的作用&#xff08;好处&#xff09;&#xff1f; 6. 讲一下类的加载和双亲委派原则&#xff1f; 7. 双亲委派模…...