当前位置: 首页 > 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;也可方便地进行三相变压器差动试验和厂用电快切和备自投试验。 操作方式装置直接外接笔记本电脑或台式机进行…...

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…...

在软件开发中正确使用MySQL日期时间类型的深度解析

在日常软件开发场景中&#xff0c;时间信息的存储是底层且核心的需求。从金融交易的精确记账时间、用户操作的行为日志&#xff0c;到供应链系统的物流节点时间戳&#xff0c;时间数据的准确性直接决定业务逻辑的可靠性。MySQL作为主流关系型数据库&#xff0c;其日期时间类型的…...

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

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

MVC 数据库

MVC 数据库 引言 在软件开发领域,Model-View-Controller(MVC)是一种流行的软件架构模式,它将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller)。这种模式有助于提高代码的可维护性和可扩展性。本文将深入探讨MVC架构与数据库之间的关系,以…...

Spring AI 入门:Java 开发者的生成式 AI 实践之路

一、Spring AI 简介 在人工智能技术快速迭代的今天&#xff0c;Spring AI 作为 Spring 生态系统的新生力量&#xff0c;正在成为 Java 开发者拥抱生成式 AI 的最佳选择。该框架通过模块化设计实现了与主流 AI 服务&#xff08;如 OpenAI、Anthropic&#xff09;的无缝对接&…...

多种风格导航菜单 HTML 实现(附源码)

下面我将为您展示 6 种不同风格的导航菜单实现&#xff0c;每种都包含完整 HTML、CSS 和 JavaScript 代码。 1. 简约水平导航栏 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport&qu…...

python执行测试用例,allure报乱码且未成功生成报告

allure执行测试用例时显示乱码&#xff1a;‘allure’ &#xfffd;&#xfffd;&#xfffd;&#xfffd;&#xfffd;ڲ&#xfffd;&#xfffd;&#xfffd;&#xfffd;ⲿ&#xfffd;&#xfffd;&#xfffd;Ҳ&#xfffd;&#xfffd;&#xfffd;ǿ&#xfffd;&am…...

论文笔记——相干体技术在裂缝预测中的应用研究

目录 相关地震知识补充地震数据的认识地震几何属性 相干体算法定义基本原理第一代相干体技术&#xff1a;基于互相关的相干体技术&#xff08;Correlation&#xff09;第二代相干体技术&#xff1a;基于相似的相干体技术&#xff08;Semblance&#xff09;基于多道相似的相干体…...

基于Springboot+Vue的办公管理系统

角色&#xff1a; 管理员、员工 技术&#xff1a; 后端: SpringBoot, Vue2, MySQL, Mybatis-Plus 前端: Vue2, Element-UI, Axios, Echarts, Vue-Router 核心功能&#xff1a; 该办公管理系统是一个综合性的企业内部管理平台&#xff0c;旨在提升企业运营效率和员工管理水…...

在 Spring Boot 项目里,MYSQL中json类型字段使用

前言&#xff1a; 因为程序特殊需求导致&#xff0c;需要mysql数据库存储json类型数据&#xff0c;因此记录一下使用流程 1.java实体中新增字段 private List<User> users 2.增加mybatis-plus注解 TableField(typeHandler FastjsonTypeHandler.class) private Lis…...