RestTemplate类是spring-web模块中进行HTTP访问的REST客户端核心类。RestTemplate请求使用阻塞式IO,适合低并发的应用场景。

1. RestTemplate类提供了3个构造函数

RestTemplate()
RestTemplate(ClientHttpRequestFactory requestFactory)
org.springframework.http.client.ClientHttpRequestFactory接口的实现类给出底层实现的第三方HTTP客户端软件。

RestTemplate(java.util.List<HttpMessageConverter<?>> messageConverters)
org.springframework.http.converter.HttpMessageConverter接口的实现对象能够在HTTP消息与Java POJO之间进行数据转换。

2. RestTemplate类能够以多种HTTP的方法,如GET, POST, PUT, DELETE, HEAD, OPTIONS等,向服务器发起HTTP请求。

2.1 GET请求的方法

getForObject(String, ResponseClass, Object[])
getForObject(String, ResponseClass, Map)
getForObject(URI, ResponseClass);
2.2 PUT请求的方法:

put(String, RequestClass, Object[])
put(String, RequestClass, Map)
put(URI, RequestClass);
2.3 POST请求的方法:

postForObject(String, RequestClass, ResonponseClass, Object[])
postForObject(String, RequestClass, ResonponseClass, Map)
postForObject(URI, RequestClass, ResonponseClass);
3. 在最新的Spring Framework 5.0.7.RELEASE中,spring-web模块底层采用的第三方HTTP客户端软件实现
3.1 Java HttpURLConnection (默认RestTemplate采用,不支持HTTP2)

SimpleClientHttpRequestFactory

3.2 Netty 4.1.25.Final

Netty4ClientHttpRequestFactory已经过时,被ReactorClientHttpConnector替代

3.3 OkHttp 3.10.0

OkHttp3ClientHttpRequestFactory

3.4 Apache HttpComponents (不支持HTTP2)

HttpClient 4.5.5
HttpComponentsClientHttpRequestFactory

HttpAsyncClient 4.1.3
HttpComponentsAsyncClientHttpRequestFactory已经过时

4. 示例

4.1 使用默认客户端构造RestTemplate对象

RestTemplate restTemplate = new RestTemplate();
等价于

RestTemplate restTemplate = new RestTemplate(new SimpleClientHttpRequestFactory());
等价于

RestTemplate restTemplate = new RestTemplate();
restTemplate.setRequestFactory(new SimpleClientHttpRequestFactory());
4.2 使用OkHttp3构造RestTemplate对象

RestTemplate restTemplate = new RestTemplate(new OkHttp3ClientHttpRequestFactory());
4.3 使用RestTemplateBuilder构建参数化的RestTemplate对象

RestTemplateBuilder restTemplateBuilder = new RestTemplateBuilder();
restTemplateBuilder.build();
4.4 使用OkHttp3Client发出HTTPS请求

SSLContext sslContext = SSLContext.getInstance("TLS");
sslContext.init(null, trustAllCerts, new java.security.SecureRandom());
SSLSocketFactory ssf = sslContext.getSocketFactory();

OkHttpClient httpClient = new OkHttpClient.Builder()
.sslSocketFactory(ssf, (X509TrustManager) trustAllCerts[0])
.hostnameVerifier(verifieredAllHost)
.build();

OkHttp3ClientHttpRequestFactory requestFactory =
new OkHttp3ClientHttpRequestFactory(httpClient);
RestTemplate template = new RestTemplate(requestFactory);
5. 替代RestTemplate的响应式客户端WebClient

在spring-webflux模块中,提供了响应式REST请求客户端WebClient,用以替代RestTemplate。

org.springframework.web.reactive.function.client.WebClient接口使用非阻塞式IO,支持异步调用,适合高并发、流式处理场景。

在该spring-webflux模块中,提供了一个WebClient默认实现org.springframework.web.reactive.function.client.DefaultWebClient类,后续我们再详细介绍。

参考链接:

https://github.com/spring-projects/spring-framework/blob/v5.0.7.RELEASE/spring-web/src/main/java/org/springframework/web/client/RestTemplate.java

https://docs.spring.io/spring/docs/5.0.x/javadoc-api/org/springframework/web/client/RestTemplate.html
---------------------
版权声明:本文为CSDN博主「易生一世」的原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/taiyangdao/article/details/81255472

Spring框架spring-web模块中的RestTemplate类详解的更多相关文章

  1. 巨人大哥谈Web应用中的Session(session详解)

    巨人大哥谈Web应用中的Session(session详解) 虽然session机制在web应用程序中被采用已经很长时间了,但是仍然有很多人不清楚session机制的本质,以至不能正确的应用这一技术. ...

  2. Spring框架入门之基于xml文件配置bean详解

    关于Spring中基于xml文件配置bean的详细总结(spring 4.1.0) 一.Spring中的依赖注入方式介绍 依赖注入有三种方式 属性注入 构造方法注入 工厂方法注入(很少使用,不推荐,本 ...

  3. (14)javaWeb中的HttpServletResponse类详解

    如果希望了解请求和响应的详细内容,可以看我的“HTTP协议”系列文章 响应体的简单概述: a,响应报文结构: b,常见的状态码,返回服务器处理的结果: c,常见的响应头: HttpServletRes ...

  4. Servlet容器Tomcat中web.xml中url-pattern的配置详解[附带源码分析]

    目录 前言 现象 源码分析 实战例子 总结 参考资料 前言 今天研究了一下tomcat上web.xml配置文件中url-pattern的问题. 这个问题其实毕业前就困扰着我,当时忙于找工作. 找到工作 ...

  5. 【集成学习】sklearn中xgboot模块中fit函数参数详解(fit model for train data)

    参数解释,后续补上. # -*- coding: utf-8 -*- """ ############################################## ...

  6. Php-SPL库中的迭代器类详解(转)

    SPL提供了多个迭代器类,分别提供了迭代访问.过滤数据.缓存结果.控制分页等功能.,因为php总是在不断壮大,我尽可能列出SPL中所有的迭代类.下面其中一些迭代器类是需要php5.4,另外一些如Sea ...

  7. Delphi 中的 XMLDocument 类详解(10) - 判断节点类型: 支节点、叶节点、文本节点、空节点

    unit Unit1; interface uses   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, For ...

  8. Delphi 中的 XMLDocument 类详解(9) - 关于 HasChildNodes 与 IsTextElement

    unit Unit1; interface uses   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, For ...

  9. MFC中CString.Format类详解

    在MFC程序中,使用CString来处理字符串是一个很不错的选择.CString既可以处理Unicode标准的字符串,也可以处理ANSI标准的字符串.CString的Format方法给我们进行字符串的 ...

随机推荐

  1. 【Collect】免费图片库网站推荐(国外高清可商用)

    #国外高清可商用免费图片库 1.https://unsplash.com/2.https://pixabay.com/3.https://www.sitebuilderreport.com/stock ...

  2. 实用小工具:VNC的安装

    安装xen时,需要使用vnc工具来进行图形化安装,安装好后启动失败,试了很多办法,最终解决. 1.使用yum安装:yum install tigervnc-server tigervnc-server ...

  3. 分析FAT32内部结构-入门篇-

    FAT32(File Allocation Table)是一种32位的FAT文件系统,微软在1996年8月发布. FAT32的数字32是下面会讲到的FAT中每个表项的长度. 磁盘(硬盘)是数据的载体, ...

  4. Java数组拷贝的五种方法

    在Java中有多种方法可以拷贝一个数组,到另外一个数组. 1.循环拷贝 在循环拷贝方法中,只需要利用i,移动指针即可复制所有数组到arrayB中. for(int i=0;i<arrayA.le ...

  5. python多项式求解

    例如:p(x) = x3 - 3x+5 可以使用向量P=[1,0,-3,5]表示,向量长度减一表示多项式最高项次数. 从右到左分别是变量x的0次幂.1次幂.2次幂……n次幂. 这里可以使用numpy的 ...

  6. Java8的Stream方法findAny空指针异常(NullPointerException)实例对比

    实战介绍 学习完Java8的Stream方法,可能你正准备大展身手,却发现遇到不少问题,本篇文章为大家带来一个findAny方法抛出java.lang.NullPointerException的场景. ...

  7. Python爬取酷狗飙升榜前十首(100)首,写入CSV文件

    酷狗飙升榜,写入CSV文件 爬取酷狗音乐飙升榜的前十首歌名.歌手.时间,是一个很好的爬取网页内容的例子,对爬虫不熟悉的读者可以根据这个例子熟悉爬虫是如何爬取网页内容的. 需要用到的库:requests ...

  8. C#数组3(可变数组)

    using System; namespace class1 { class program { static void Main(string[] args) { ][];//这里的行必须定义好,但 ...

  9. WPF属性绑定实现双向变化

    WPF依赖项属性可以实现属性的绑定,成功绑定之后只要修改后台绑定的属性,即可UI同步自动更新绑定的值,无需手动刷新界面:同样,前台的值变化后,通过获取绑定的属性值也可获取UI变化后的值,实现双向变化的 ...

  10. qt md5加密,base64编码解码

    qt md5加密,base64编码解码 md5加密 QByteArray data = "12121221"; data += "asdfas"; QByteA ...