spring cloud學習(三)-RestTemplate的用法

什麼是RestTemplate

RestTemplate 是從 Spring3.0 開始支持的一個 HTTP 請求工具,它提供了常見的REST請求方案的模版,例如 GET 請求、POST 請求、PUT 請求、DELETE 請求以及一些通用的請求執行方法 exchange 以及 execute。RestTemplate 繼承自 InterceptingHttpAccessor 並且實現了 RestOperations 接口,其中 RestOperations 接口定義了基本的 RESTful 操作,這些操作在 RestTemplate 中都得到了實現。接下來我們就來看看這些操作方法的使用。

如何使用 

首先我們創建一個普通的maven工程、然後分別創建eureka、provider、consumer三個SpringBoot子工程項目、然後分別在application.properties或者application.yml進行配置

在使用RestTemplate內的方法之前需要將RestTemplate加入到容器中

@Configuration
public class ApplicationConfig {

    @Bean
    @LoadBalanced
    public RestTemplate getRestTemplate(){
        return new RestTemplate();
    }
}

RestTemplate中getForObject方法的使用

getForObject 方法和 getForEntity 方法類似,getForObject 方法也有三個重載的方法,參數和 getForEntity 一樣,因此這裏我就不重複介紹參數了,這裏主要說下 getForObject 和 getForEntity 的差異,這兩個的差異主要體現在返回值的差異上, getForObject 的返回值就是服務提供者返回的數據,使用 getForObject 無法獲取到響應頭。例如,還是上面的請求,利用 getForObject 來發送 HTTP 請求,結果如下
此處爲服務消費者端

測試結果爲:


RestTemplate中getForEntity方法的使用

我們要了解RestTemplate 發送的是Http請求,那麼響應數據一定是有響應頭的,如果需要獲取響應頭的信息,那麼就可以使用getForEntity來發送Http請求,此時返回的就是一個ResponseEntity的實例,這個實例包含看響應頭和響應的數據,例如下面的這個接口是來自provider 中的

@GetMapping("/consumer/payment/getforentity/list")
    public JsonResult<Payment> getListEntity(){
        ResponseEntity<JsonResult> forEntity = restTemplate.getForEntity(PAYMENT_URL + "/payment/list", JsonResult.class);
        if (forEntity.getStatusCode().is2xxSuccessful()){
            return  forEntity.getBody();
        }else {
            return  new JsonResult<>(500,"操作失敗!!!");
        }
    }

測試結果如下:

總結:

本文主要向大家介紹了 RestTemplate 這樣一個 HTTP 請求工具類的常見用法,一些比較冷門的用法本文並未涉及,讀者有興趣可以自行查找資料學習。由於 Spring、SpringMVC、Spring Boot、Spring Cloud 這些家族成員一脈相承,因此在 SpringMVC 中支持良好的 RESTful 風格的接口在後續的各個組件中都繼續支持,在微服務接口設計時,大部分接口也都滿足 RESTful 風格,使用 RestTemplate 則可以非常方便地發送 RESTful 風格的請求,因此這個工具的使用是我們後面學習的基礎,常見的用法一定要熟練掌握。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章