環境搭建web
本文環境指的 Spring Boot下1.4.2版本下
pom.xml (核心內容)spring
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.4.2.RELEASE</version>
<relativePath/>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependencies>
1
2
3
4
5
6
7
8
9
10
11
12
若是單純想用RestTemplate 引上面的應該是多餘了,博主沒去查閱具體那個包,能夠自行去Maven 中央倉庫搜索有沒有專門的RestTemplate包json
RestTemplate有簡寫方法,但不具有通用性且沒法作細節設置故本文再也不贅述
舉例:瀏覽器
restTemplate.getForObject(url, String.class);
// 向url發送 Get類型請求,將返回結果 以String類型顯示
// 能很明顯發現沒法設置編碼格式等,亂碼等問題沒法解決
1
2
3
有興趣可訪問,下文只提通用性方法
RestTemplate 官方 APIapp
注意異步
默認的 RestTemplate 有個機制是請求狀態碼非200 就拋出異常,會中斷接下來的操做,若是要排除這個問題那麼須要覆蓋默認的 ResponseErrorHandler ,下面爲用什麼也不幹覆蓋默認處理機制ide
RestTemplate restTemplate = new RestTemplate();
ResponseErrorHandler responseErrorHandler = new ResponseErrorHandler() {
@Override
public boolean hasError(ClientHttpResponse clientHttpResponse) throws IOException {
return true;
}spring-boot
@Override
public void handleError(ClientHttpResponse clientHttpResponse) throws IOException {post
}
};
restTemplate.setErrorHandler(responseErrorHandler);
1
2
3
4
5
6
7
8
9
10
11
12
13
實例測試
application/json類型請求
RestTemplate restTemplate=new RestTemplate();
String url="http://www.testXXX.com";
/* 注意:必須 http、https……開頭,否則報錯,瀏覽器地址欄不加 http 之類不出錯是由於瀏覽器自動幫你補全了 */
HttpHeaders headers = new HttpHeaders();
/* 這個對象有add()方法,可往請求頭存入信息 */
headers.setContentType(MediaType.APPLICATION_JSON_UTF8);
/* 解決中文亂碼的關鍵 , 還有更深層次的問題 關係到 StringHttpMessageConverter,先佔位,之後補全*/
HttpEntity<String> entity = new HttpEntity<String>(body, headers);
/* body是Http消息體例如json串 */
restTemplate.exchange(url, HttpMethod.POST, entity, String.class);
/*上面這句返回的是往 url發送 post請求 請求攜帶信息爲entity時返回的結果信息
String.class 是能夠修改的,其實本質上就是在指定反序列化對象類型,這取決於你要怎麼解析請求返回的參數*/
1
2
3
4
5
6
7
8
9
10
11
12
另post、get、delete……等其餘http請求類型只需將exchange參數修改成HttpMethod.GET 等等。
application/x-www-form-urlencoded類型請求
RestTemplate restTemplate=new RestTemplate();
/* 注意:必須 http、https……開頭,否則報錯,瀏覽器地址欄不加 http 之類不出錯是由於瀏覽器自動幫你補全了 */
String url="http://www.testXXX.com";
String bodyValTemplate = "var1=" + URLEncoder.encode("測試數據1", "utf-8") + "&var2=" + URLEncoder.encode("test var2", "utf-8");
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
HttpEntity entity = new HttpEntity(bodyValTemplate, headers);
restTemplate.exchange(url, HttpMethod.POST, entity, String.class);
1
2
3
4
5
6
7
8
9
另外一種構造 HttpEntity 的方法
LinkedMultiValueMap body=new LinkedMultiValueMap();
body.add("var1","測試數據1");
body.add("var2","test Val2");
HttpEntity entity = new HttpEntity(body, headers);
1
2
3
4
上方請求在PostMan裏等效於圖
RestTemplate還有專門支持異步請求的特殊類 AsyncRestTemplate,具體用法和RestTemplate相似(須要 ListenableFutureCallback 基礎) --------------------- 做者:SolidCocoi 來源:CSDN 原文:https://blog.csdn.net/u014430366/article/details/65633679?utm_source=copy 版權聲明:本文爲博主原創文章,轉載請附上博文連接!