Spring Cloud Alibaba - RestTemplate
因為此處沒有使用<code>LoadBalancerClient</code>做負載均衡,是以在啟動類中需要添加注解<code>@LoadBalanced</code>
結果為:
其中statusCodeValue = 200 httpStatus = 200 OK httpHeaders = <code>[Content-Type:"text/plain;charset=UTF-8", Date:"Fri, 23 Jul 2021 09:02:34 GMT", Keep-Alive:"timeout=60", Connection:"keep-alive", Content-Length:"22"] =[Content-Type:"text/plain;charset=UTF-8", Date:"Fri, 23 Jul 2021 09:02:34 GMT", Keep-Alive:"timeout=60", Connection:"keep-alive", Content-Length:"22"]</code> body = this is a get response
restTemplate.getForEntity(); 方法擷取的是狀态碼、頭部資訊、結果體
首先在消費者和服務提供者的工程項目中都必須要含有同樣的實體類
在服務提供者中存在對應的調用接口:
在消費者中調用:
因為有兩種方法,暫且傳回String類型,在控制台将兩種方法獲得的User對象輸出:
tips:restTemplate.getForObject( )方法僅傳回該請求的内容體
消費者中編寫接口:
![image-20210723183459508](E:\software\JAVA\springcloud-alibaba\document\動力節點spring cloud alibaba\image-20210723183459508.png)
tips:注意參數存放隻能存放在MultiValueMap接口實作類為LinkedMultiValueMap的map中,其次調用restTemplate.postForObject( )或者是restTemplate.postForEntity( )方法中的傳參順序與get不同,并且傳入的url中不需要帶有參數
從此以後,restTemplate.xxxForObject( ) 和 restTemplate.xxxForEntity( )兩種方法隻選擇一種方法進行示範
服務端提供相應的服務,通過@RequestBody注解來接收消費者端傳進來的對象:
消費者端提供接口:
将原先的資料集合替換為實體對象進行傳值。
消費者端:
傳輸JSON格式的字元串時,需要使用HttpEntity 對JSON
進行包裝才可以傳輸。
服務者端:
同樣使用注解@RequestBody 進行接收:
結果如下:
tips:如果restTemplate.postForObject( )方法中除了傳輸的對象還存在另外需要傳的值,如:token,隻需在後面繼續添加,逗号隔開即可。因為在底層這邊維護的是一個可變數組
服務端可以通過@RequestParam注解的方式進行擷取:
同樣修改時的相關參數需要存在MultiValueMap<String,Object> dataMap = new LinkedMultiValueMap<String,Object>( );中。因為Put請求和Post請求類似,甚至可以使用Post請求去代替Put請求。
服務端:
不能使用@RequestBody【User user】 方法接收。
delete請求可以使用get請求代替。參數綁定方式和get請求類似:
消費端接口:
與GET請求類似,但是restTemplate.delete( )方法沒有傳回值。
ribbon是用戶端負載均衡
我們在啟動類中進行添加: