Spring框架spring-web模塊中的RestTemplate類詳解

RestTemplate類是spring-web模塊中進行HTTP訪問的REST客戶端核心類。RestTemplate請求使用阻塞式IO,適合低併發的應用場景。html

1. RestTemplate類提供了3個構造函數java

RestTemplate()
RestTemplate(ClientHttpRequestFactory requestFactory)
org.springframework.http.client.ClientHttpRequestFactory接口的實現類給出底層實現的第三方HTTP客戶端軟件。react

RestTemplate(java.util.List<HttpMessageConverter<?>> messageConverters)
org.springframework.http.converter.HttpMessageConverter接口的實現對象可以在HTTP消息與Java POJO之間進行數據轉換。
 git

2. RestTemplate類可以以多種HTTP的方法,如GET, POST, PUT, DELETE, HEAD, OPTIONS等,向服務器發起HTTP請求。github

2.1 GET請求的方法web

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

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

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

相關文章
相關標籤/搜索