1. 程式人生 > >SpringBoot圖文教程17—上手就會 RestTemplate 使用指南「Get Post」「設定請求頭」

SpringBoot圖文教程17—上手就會 RestTemplate 使用指南「Get Post」「設定請求頭」

![](https://img2020.cnblogs.com/other/1003051/202003/1003051-20200320211029269-1539461491.png) > **有天上飛的概念,就要有落地的實現** > > - 概念十遍不如程式碼一遍,朋友,希望你把文中所有的程式碼案例都敲一遍 > > - 先贊後看,養成習慣 **SpringBoot 圖文教程系列文章目錄** 1. [SpringBoot圖文教程1—SpringBoot+Mybatis 環境搭建](https://mp.weixin.qq.com/s/phk6j3ChBP-kPtS2xZeEZg) 2. [SpringBoot圖文教程2—日誌的使用「logback」「log4j」](https://mp.weixin.qq.com/s/7Mw_xhFF4Q5NtdtcsHc67Q) 3. [SpringBoot圖文教程3—「‘初戀’情結」整合Jsp](https://mp.weixin.qq.com/s/BYzVg5NBcF_ou_PyX8ygag) 4. [SpringBoot圖文教程4—SpringBoot 實現檔案上傳下載](https://mp.weixin.qq.com/s/6ctykPo3eDBEB7YsC0PAZw) 5. [SpringBoot圖文教程5—SpringBoot 中使用Aop](https://mp.weixin.qq.com/s/17qMRlv_mUfwkcVD05Bh2g) 6. [SpringBoot圖文教程6—SpringBoot中過濾器的使用](https://mp.weixin.qq.com/s/r2BO4UMNRAw_REA6nNFLKw) 7. [SpringBoot圖文教程7—SpringBoot攔截器的使用姿勢這都有](https://mp.weixin.qq.com/s/YpDhuOTpt1vjYjnhnK8YdQ) 8. [SpringBoot圖文教程8—SpringBoot整合MBG「程式碼生成器」](https://mp.weixin.qq.com/s/uGYO4fkw03Kxpfp_PIA8rQ) 9. [SpringBoot圖文教程9—SpringBoot 匯入匯出 Excel 「Apache Poi」](https://mp.weixin.qq.com/s/BXfxhO5rFFg6XZQ0rZgGMg) 10. [SpringBoot圖文教程10—模板匯出|百萬資料Excel匯出|圖片匯出「easypoi」](https://mp.weixin.qq.com/s/8Yqfn27UCFP2lU3_IYb5AQ) 11. [SpringBoot圖文教程11—從此不寫mapper檔案「SpringBoot整合MybatisPlus」](https://mp.weixin.qq.com/s/8KG5Wj77MYEUCIRFqWBdPQ) 12. [SpringBoot圖文教程12—SpringData Jpa的基本使用](https://mp.weixin.qq.com/s/gPfSjBj1hMWf23J50d5Z_g) 13. [SpringBoot圖文教程13—SpringBoot+IDEA實現程式碼熱部署](https://mp.weixin.qq.com/s/DYP_12V01D0NJGEBdwK9Ew) 14. [SpringBoot圖文教程14—阿里開源EasyExcel「為百萬資料讀寫設計」](https://mp.weixin.qq.com/s/FNuL3maNtiFCVR7hREYpLA) 15. [SpringBoot圖文教程15—專案異常怎麼辦?「跳轉404錯誤頁面」「全域性異常捕獲」](https://mp.weixin.qq.com/s/O97_ZqoUCl5fICXHbSCf2Q) 16. [SpringBoot圖文教程16—SpringBoot 多模組開發「web」「打包」](https://mp.weixin.qq.com/s/CDWnG0wr6hk6TvDYIELIaQ) ## 前言 問個問題:通過Java程式碼怎麼傳送Http請求,請求另一個Java程式的Controller方法呢? ![](https://img2020.cnblogs.com/other/1003051/202003/1003051-20200320211030558-449919758.png) 好像真的有點觸及到知識盲區了呦 在以前的程式碼中,Java程式都是被請求的一方,傳送請求的要麼是Ajax,要麼是瀏覽器,要麼是postman等,今天就來一起學習一下如何通過Java程式碼傳送Http請求。 ## RestTemplate 的使用 ![](https://img2020.cnblogs.com/other/1003051/202003/1003051-20200320211032680-2015702649.png) ### 準備工作「可以跳過,不影響教程學習」 因為我們要通過RestTemplate傳送請求,請求另外一個專案的Controller層方法(介面),所以我們首先需要一個被請求的專案。 關於這個專案,我已經搭建好了,碼雲地址為:https://gitee.com/bingqilinpeishenme/boot-demo/tree/master/boot-base-rest 在專案中有三個方法,分別是測試Get請求和Post請求如下 ``` package com.lby.controller; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.*; /** * @author luxiaoyang * @create 2020-03-18-20:02 */ @Controller public class TestController { /** * @GetMapping("testRestGet") 當前方法只接受Get請求 * 等價於 * @RequestMapping(path = "testRestGet",method = RequestMethod.GET) */ @GetMapping("testRestGet") @ResponseBody public String testRestGet(String username){ return "這是一個Get請求,接受引數:"+username; } /** * @PostMapping("") 當前方法只接受Post請求 * 等價於 * @RequestMapping(path = "testRestPost",method = RequestMethod.POST) */ @PostMapping("testRestPost") @ResponseBody public String testRestPost(String username){ return "這是一個Post請求,接受引數:"+username; } /** * 測試 postForLocation 給RestTemplate響應url地址 */ @PostMapping("testRestPostLocation") public String testRestPostLocation(String username){ System.out.println(username); return "redirect:/success.html"; } } ``` ### 什麼是RestTemplate **Spring中封裝的通過Java程式碼傳送RestFul請求的模板類,內建傳送get post delete等請求的方法**,在SpringBoot中只要匯入spring-boot-starter-web的依賴可以直接使用。 ### 快速開始 確定專案中匯入spring-boot-starter-web的依賴。 **第一步:配置RestTemplate** ![](https://img2020.cnblogs.com/other/1003051/202003/1003051-20200320211033651-239113789.png) ``` /** * RestTemplate配置 */ @Configuration public class RestTemplateConfig { @Bean public RestTemplate restTemplate(ClientHttpRequestFactory factory) { return new RestTemplate(factory); } @Bean public ClientHttpRequestFactory simpleClientHttpRequestFactory() { SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory(); // 超時設定 factory.setReadTimeout(5000);//ms factory.setConnectTimeout(15000);//ms return factory; } } ``` **第二步:直接使用RestTemplate的Api傳送請求** 這一步,我們直接在測試類中傳送Get方式的請求,進行簡單的測試,感受到效果之後,再進行更多API深入的學習。 ``` package com.lby; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.junit4.SpringRunner; import org.springframework.web.client.RestTemplate; @RunWith(SpringRunner.class) @SpringBootTest(classes = {BootResttemplateApplication.class}) public class BootResttemplateApplicationTests { @Autowired private RestTemplate restTemplate; /** * 測試get請求 */ @Test public void test1(){ /** * getForObject * * 引數1 要請求的地址的url 必填項 * 引數2 響應資料的型別 是String 還是 Map等 必填項 * 引數3 請求攜帶引數 選填 * * getForObject 方法的返回值就是 被呼叫介面響應的資料 */ String result = restTemplate.getForObject("http://localhost:8802/product/showProductById?id=1", String.class); System.out.println(result); } } ``` ### RestTemplate的主要API | HTTP Method | RestTemplate Methods | | --- | --- | | Get | getForObject, getForEntity | | Post | postForEntity, postForObject, postForLocation | | PUT | put | | any | exchange, execute | | DELETE | delete | | HEAD | headForHeaders | | OPTIONS | optionsForAllow | 以上是RestTemplate的主要API,其中大部分的API會在後續的程式碼中詳細講解。 ### Get請求的所有使用方式 Get請求方式: 1. url拼接引數 2. url拼接引數「佔位符的方式」 3. 獲取響應實體物件「響應狀態碼」 ``` /** * 測試get請求 */ @Test public void test1(){ /** * getForObject * * 引數1 要請求的地址的url 必填項 * 引數2 響應資料的型別 是String 還是 Map等 必填項 * 引數3 請求攜帶引數 選填 * * getForObject 方法的返回值就是 被呼叫介面響應的資料 */ String result = restTemplate.getForObject("http://localhost:8802/testRestGet?username=zhangsan", String.class); System.out.println(result); /** * getForEntity 方法 * 引數1 要請求的地址的url 必填項 * 引數2 響應資料的型別 是String 還是 Map等 必填項 * 引數3 請求攜帶引數 選填 * * 返回值型別為 ResponseEntity * * 可以通過ResponseEntity 獲取響應的資料,響應的狀態碼等資訊 */ Respon