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. IT兄弟连 HTML5教程 HTML5技术的应用现状及HTML5平台的兴起

    HTML5的优良特性很快被各种类型的网站利用,比如文件拖拽到网页上传功能,多数即使用HTML5提供的新属性就可以完成,来实现素材的免插件拖放.因此,HTML5技术实际上在国内已经获得了较广泛的应用与支 ...

  2. Linux 安装指定版本Git

    git二进制文件下载地址: https://mirrors.edge.kernel.org/pub/software/scm/git/ 1.下载v2.21.0版本 wget https://mirro ...

  3. python爬虫:将数据保存到本地

    一.python语句存储 1.with open()语句 with open(name,mode,encoding) as file: file.write() name:包含文件名称的字符串; mo ...

  4. Koa + GraphQL 示例

    初始化项目 创建 graphql-example 文件夹进入后初始化一个 package.json 文件. $ mkdir graphql-example && cd $_ $ yar ...

  5. VS 自动创建带增删查改的MVC网站

    VS 自动创建带增删查改的MVC网站 MVC.Net教程   废话放在前头,说一下这个文章的缘起某天某妹纸找我,说这个MVC的创建不太会,要记一下controllers.models.还有页面引用的东 ...

  6. indexOf()字符位置

    package seday01; /** * int indexOf(String str) * 查找给定字符串在当前字符串中的位置,若返回值为-1,则 * 表示当前字符串中不含有给定的内容. * @ ...

  7. DevExpress的TextEdit控件没法调整高度解决

    场景 Winform控件-DevExpress18下载安装注册以及在VS中使用: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/1 ...

  8. [转]Oracle 11g RAC SCAN ip的原理及配置

    原文地址:http://tiany.blog.51cto.com/513694/1421917/ Oracle 11g RAC SCAN ip的原理及配置   Oracle 11g RAC网格即插即用 ...

  9. BayaiM__SQLLDR 用法:

    BayaiM__SQLLDR 用法: ===================================================================== C:\Users\Ad ...

  10. BayaiM__ oracle函数_01

    BayaiM__ oracle函数_01   Oracle函数--------------------------------------------------------------------- ...