zoukankan      html  css  js  c++  java
  • Spring框架spring-web模块中的RestTemplate类详解

    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 cloud 搭建(服务)
    spring cloud 搭建(配置中心)
    spring cloud 搭建(注册中心)
    spring cloud 搭建
    skywalking 配置和使用(windows)
    jenkins 发布报错
    web 显示 pdf
    springmvc Cacheable 不设置key
    iRed邮箱使用情况
    关闭SSL服务[iRedMail]
  • 原文地址:https://www.cnblogs.com/xd502djj/p/11342985.html
Copyright © 2011-2022 走看看