Insight spring RestTemplate
insight spring 提供的rest操作,以及jdk自帶URL http訪問的實現。
spring RestTemplate 執行流程
/**
* http請求,根據指定的方法訪問URI
* @param requestCallback write請求物件至 request。藉助HttpMessageConverter 元件,轉換物件,如json的序列化
* 類比前端ajax請求,JSON.stringify(request)
* @param responseExtractor 從response 解析返回值。responseExtractor 封裝HttpMessageConverter 元件,用以轉換response,比如json的反序列化。
* new HttpMessageConverterExtractor<T>(responseType, getMessageConverters(), logger);
*/
protected <T> T doExecute(URI url, HttpMethod method, RequestCallback requestCallback, ResponseExtractor<T> responseExtractor) {
try {
// 1.構造request (open a connection, set timeout...)
ClientHttpRequest request = createRequest(url, method);
if (requestCallback != null) {
// 2.序列化request,write bytes to request body
requestCallback.doWithRequest(request);
}
// 3.check、connect,構造response
response = request.execute();
// 4.handle error
handleResponse(url, method, response);
if (responseExtractor != null) {
// 5.解析、反序列化response
return responseExtractor.extractData(response);
}
} catch (IOException ex) {
// ......
} finally {
// 6.切記close InputStream
if (response != null) {
response.close();
}
}
}
JDK 自帶URL實現的http訪問
對應上述的執行流程,JDK URL的具體操作
/*
* createRequest 實現
*/
// 根據url協議建立對應的URLConnection,不會真正的建立網路連線.
URLConnection connection = (HttpURLConnection) url.openConnection();
// A timeout of zero is interpreted as an infinite timeout.
connection.setConnectTimeout(this.connectTimeout);
connection.setReadTimeout(this.readTimeout);
connection.setDoInput(true);
// 如果是POST、PUT、PATCH、DELETE方法,需要enable output
connection.setDoOutput(true);
// 預設方法是GET.
connection.setRequestMethod(httpMethod);
/**
* request.execute 實現
*/
connection.setRequestProperty("Cookie", headerValue);
connection.addRequestProperty(headerName, actualHeaderValue);
// 構造Response,responseBody = connection.getInputStream()
new SimpleClientHttpResponse(connection)
相關文章
- Spring WebClient vs. RestTemplateSpringWebclientREST
- Spring之RestTemplate使用小結SpringREST
- 一起學 Spring 之 RestTemplateSpringREST
- Spring之RestTemplate中級使用篇SpringREST
- 對Spring 的RestTemplate進行包裝SpringREST
- Insight spring-task:executorSpring
- Spring Cloud Config—提供自定義RestTemplateSpringCloudREST
- Insight spring-session 配置(整合方式)SpringSession
- 04-spring-boot-resttemplate netty定製使用SpringbootRESTNetty
- Spring Boot 參考指南(使用RestTemplate呼叫REST服務)Spring BootREST
- RestTemplate使用REST
- Spring RestTemplate作為負載平衡器客戶端SpringREST負載客戶端
- 180813-Spring之RestTemplate使用小結一SpringREST
- Spring Cloud Alibaba 使用RestTemplate進行服務消費SpringCloudREST
- 【web】Spring RestTemplate提交時設定POST請求引數WebSpringREST
- 精講RestTemplate第1篇-在Spring或非Spring環境下如何使用RESTSpring
- RestTemplate的使用REST
- RestTemplate實踐REST
- Spring-RestTemplate之urlencode引數解析異常全程分析SpringREST
- 企業級 Spring Boot 教程 (十四)用restTemplate消費服務Spring BootREST
- Spring Boot(三):RestTemplate提交表單資料的三種方法Spring BootREST
- 【web】Spring RestTemplate提交時設定http header請求頭WebSpringRESTHTTPHeader
- Spring Cloud Commons教程(二)Spring RestTemplate作為負載平衡器客戶端SpringCloudREST負載客戶端
- Spring OAuth2RestTemplate getForEntity 中文亂碼解決方法SpringOAuthREST
- 詳解 RestTemplate 操作REST
- 聊一聊 RestTemplateREST
- RestTemplate、WebClient 和 RestClientRESTWebclient
- restTemplate訪問httpsRESTHTTP
- Insight Windows AzureWindows
- 【API知識】RestTemplate的使用APIREST
- RestTemplate和 apache HttpClient 使用方式RESTApacheHTTPclient
- Source Insight:使用Source Insight檢視C/C++原始碼C++原始碼
- source insight使用教程
- 給Source Insight做個外掛之一--發現Source Insight
- RestTemplate超時引發的血案REST
- HTTP 客戶端:RestClient、WebClient、RestTemplateHTTP客戶端RESTclientWeb
- source insight4配置
- Spring Cloud Alibaba基礎教程:支援的幾種服務消費方式(RestTemplate、WebClient、Feign)SpringCloudRESTWebclient