RestTemplate实现多种底层HTTP客户端类库的切换用法

 更新时间:2022年03月16日 17:27:18   作者:字母哥哥  
这篇文章主要为大家详细的讲解了RestTemplate实现多种底层HTTP客户端类库的切换示例,有需要的朋友可以借鉴参考下,希望能够有所帮助祝大家多多进步

本文是精讲RestTemplate第2篇,前篇的blog访问地址如下:

RestTemplate在Spring或非Spring环境下使用精讲

RestTemplate只是对其他的HTTP客户端的封装,其本身并没有实现HTTP相关的基础功能。其底层实现是可以配置切换的,我们本小节就带着大家来看一下RestTemplate底层实现,及如何实现底层基础HTTP库的切换。

一、源码分析

RestTemplate有一个非常重要的类叫做HttpAccessor,可以理解为用于HTTP接触访问的基础类。下图为源码:

RestTemplate-HttpAccessor源码分析

从源码中我们可以分析出以下几点信息

  • RestTemplate 支持至少三种HTTP客户端库。

SimpleClientHttpRequestFactory。对应的HTTP库是java JDK自带的HttpURLConnection。

HttpComponentsAsyncClientHttpRequestFactory。对应的HTTP库是Apache HttpComponents。

OkHttp3ClientHttpRequestFactory。对应的HTTP库是OkHttp

  • java JDK自带的HttpURLConnection是默认的底层HTTP实现客户端
  • SimpleClientHttpRequestFactory,即java JDK自带的HttpURLConnection不支持HTTP协议的Patch方法,如果希望使用Patch方法,需要将底层HTTP客户端实现切换为Apache HttpComponents 或 OkHttp

可以通过设置setRequestFactory方法,来切换RestTemplate的底层HTTP客户端实现类库。

二、底层实现切换方法

从开发人员的反馈,和网上的各种HTTP客户端性能以及易用程度评测来看,OkHttp 优于 Apache HttpComponents、Apache HttpComponents优于HttpURLConnection。所以我个人更建议大家将底层HTTP实现切换为okHTTP。

以下所讲的切换方法,基于第一篇内容:RestTemplate在Spring或非Spring环境下使用精讲

2.1.切换为okHTTP

首先通过maven坐标将okHTTP的包引入到项目中来

<dependency>
    <groupId>com.squareup.okhttp3</groupId>
    <artifactId>okhttp</artifactId>
    <version>4.7.2</version>
</dependency>

如果是spring 环境下通过如下方式使用OkHttp3ClientHttpRequestFactory初始化RestTemplate bean对象。

@Configuration
public class ContextConfig {
    @Bean("OKHttp3")
    public RestTemplate OKHttp3RestTemplate(){
        RestTemplate restTemplate = new RestTemplate(new OkHttp3ClientHttpRequestFactory());
        return restTemplate;
    }
}

如果是非Spring环境,直接new RestTemplate(new OkHttp3ClientHttpRequestFactory()之后使用就可以了。

2.2.切换为Apache HttpComponents

与切换为okHTTP方法类似、不再赘述。

<dependency>
    <groupId>org.apache.httpcomponents</groupId>
    <artifactId>httpclient</artifactId>
    <version>4.5.12</version>
</dependency>

使用HttpComponentsClientHttpRequestFactory初始化RestTemplate bean对象

@Bean("httpClient")
public RestTemplate httpClientRestTemplate(){
    RestTemplate restTemplate = new RestTemplate(new HttpComponentsClientHttpRequestFactory());
    return restTemplate;
}

以上就是RestTemplate实现多种底层HTTP客户端类库的切换精讲的详细内容,更多关于RestTemplate底层HTTP客户端类库切换的资料请关注脚本之家其它相关文章!

相关文章

  • 基于Java中最常用的集合类框架之HashMap(详解)

    基于Java中最常用的集合类框架之HashMap(详解)

    下面小编就为大家带来一篇基于Java中最常用的集合类框架之HashMap(详解)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-11-11
  • SpringBoot之自定义Schema扩展方式

    SpringBoot之自定义Schema扩展方式

    这篇文章主要介绍了SpringBoot之自定义Schema扩展方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-09-09
  • 使用ByteArrayOutputStream写入字符串方式

    使用ByteArrayOutputStream写入字符串方式

    这篇文章主要介绍了使用ByteArrayOutputStream写入字符串方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-12-12
  • Spring Security角色继承实现过程解析

    Spring Security角色继承实现过程解析

    这篇文章主要介绍了Spring Security角色继承实现过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-08-08
  • java对象初始化代码详解

    java对象初始化代码详解

    这篇文章主要介绍了java对象初始化代码详解,涉及实例变量的初始化,类变量的初始化等相关介绍几代码示例,具有一定参考价值,需要的朋友可以了解下。
    2017-11-11
  • 通过java api实现解压缩zip示例

    通过java api实现解压缩zip示例

    这篇文章主要介绍了通过java api实现解压缩zip示例,需要的朋友可以参考下
    2014-04-04
  • 简介Java程序的Shell脚本包装

    简介Java程序的Shell脚本包装

    这篇文章主要介绍了简介Java程序的Shell脚本包装,将Java运用于脚本程序当中,有时或许是个不错的主意~需要的朋友可以参考下
    2015-07-07
  • 详解Spring Bean 之间的特殊关系

    详解Spring Bean 之间的特殊关系

    在 Spring 容器中,两个 Bean 之间除了通过 <ref> 建立依赖关系外,还存在着一些特殊关系。这篇文章给大家想想介绍了Spring Bean 之间的特殊关系,非常不错,具有参考借鉴价值,需要的朋友参考下
    2018-05-05
  • springboot 文件上传大小配置的方法

    springboot 文件上传大小配置的方法

    本篇文章主要介绍了springboot 文件上传大小配置的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-10-10
  • java去掉文本中多余的空格与空行实例代码

    java去掉文本中多余的空格与空行实例代码

    在最近的一个项目中发现用户提交的数据中多了很多多余的空格与空行,为了不影响使用,只能想办法去掉了,下面这篇文章主要给大家介绍了关于java去掉文本中多余的空格与空行的相关资料,需要的朋友可以参考借鉴,下面来一起看看吧。
    2017-08-08

最新评论