Springboot集成restTemplate過程詳解
一restTemplate簡介
restTemplate底層是基于HttpURLConnection實現(xiàn)的restful風格的接口調用,類似于webservice,rpc遠程調用,但其工作模式更加輕量級,方便于rest請求之間的調用,完成數(shù)據(jù)之間的交互,在springCloud之中也有一席之地。大致調用過程如下圖
二restTemplate常用方法列表
forObeject跟forEntity有什么區(qū)別呢?主要的區(qū)別是forEntity的功能更加強大一些,其返回值是一個ResponseEntity
2.1 get請求方法預覽
2.2 post方法請求預覽
2.3put請求方法預覽
2.4 delete請求方法預覽
2.5exchange方法預覽
三rest接口調用示例
restTemplate配置
首先本次示例采用的是springboot2.x以上版本,javaSE8;其次發(fā)布的服務端是同一臺機子,服務端端口8090,客戶端端口8080;類路徑y(tǒng)ouku1327;在實際工作中最常用是get,post請求方式;restTemplate簡單配置如下:
/** * @Author lsc * @Description <p> </p> * @Date 2019/10/14 11:40 * @Version 1.0 */ @Configuration public class RestTemplateConfig { // 配置 RestTemplate @Bean public RestTemplate restTemplate(ClientHttpRequestFactory factory){ return new RestTemplate(factory); } @Bean public ClientHttpRequestFactory simpleClientHttpRequestFactory(){ // 創(chuàng)建一個 httpCilent 簡單工廠 SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory(); // 設置連接超時 factory.setConnectTimeout(15000); // 設置讀取超時 factory.setReadTimeout(5000); return factory; } }
3.1 get請求接口調用示例
服務費發(fā)布的端口
@GetMapping("user") public String getUser(){ return "youku1327"; } @GetMapping("user/{name}") public String getUserName(@PathVariable String name){ return name; }
客戶端調用
GET參數(shù)說明:
- 第一個參數(shù)是url。
- 第二個參數(shù)是返回值類型。
- 第三個參數(shù)是uri地址路徑變量。
/* * @Author lsc * @Description <p> 獲得無參的get請求 </p> * @Date 2019/10/17 21:15 * @Param [] * @return void **/ @Test public void testGETNoParams(){ String result = restTemplate.getForObject("http://localhost:8090/youku1327/user", String.class); System.out.println(result); } /* * @Author lsc * @Description <p> URL帶參 </p> * @Date 2019/10/18 13:49 * @Param [] * @return void **/ @Test public void testGETParams(){ // http://localhost:8090/youku1327/user/{1} String result = restTemplate.getForObject("http://localhost:8090/youku1327/user/{name}", String.class,"lsc"); System.out.println(result); }
3.2 post請求示例
POST請求參數(shù)說明
第一個參數(shù)是url。第二個參數(shù)是請求參數(shù)。第三個參數(shù)是返回值類型。第三個參數(shù)是uri地址路徑變量。
服務端發(fā)布接口
@PostMapping("provider") public ResponseEntity<String> addData(@RequestBody JSONObject jsonObject){ String user = (String) jsonObject.get("user"); return ResponseEntity.ok(user); }
客戶端接口調用
/* * @Author lsc * @Description <p> post</p> * @Date 2019/10/18 23:23 * @Param [] * @return void **/ @Test public void testPostMethod() throws MalformedURLException { JSONObject jsonObject = new JSONObject(); jsonObject.put("user","youku1327"); HttpHeaders httpHeaders = new HttpHeaders(); // 設置請求類型 httpHeaders.setContentType(MediaType.APPLICATION_JSON_UTF8); // 封裝參數(shù)和頭信息 HttpEntity<JSONObject> httpEntity = new HttpEntity(jsonObject,httpHeaders); String url = "http://localhost:8090/youku1327/provider"; ResponseEntity<String> mapResponseEntity = restTemplate.postForEntity(url, httpEntity, String.class); System.out.println(mapResponseEntity.getBody()); }
3.3 put接口調用示例
PUT請求參數(shù)說明
第一個參數(shù)是url。第二個參數(shù)是請求參數(shù)。第三個參數(shù)是uri地址路徑變量。
服務端發(fā)布接口
@PutMapping("provider/{id}") public ResponseEntity<JSONObject> updateData(@PathVariable Long id, @RequestBody JSONObject jsonObject){ Object object = jsonObject.get("user"); jsonObject.put("id",id); // {"id":1327,"user":"youku1327"} System.out.println(jsonObject); return ResponseEntity.ok(jsonObject); }
客戶端接口調用
/* * @Author lsc * @Description <p> put</p> * @Date 2019/10/18 23:23 * @Param * @return **/ @Test public void testPutMethod() throws MalformedURLException { JSONObject jsonObject = new JSONObject(); jsonObject.put("user","youku1327"); HttpHeaders httpHeaders = new HttpHeaders(); // 設置請求類型 httpHeaders.setContentType(MediaType.APPLICATION_JSON_UTF8); // 封裝參數(shù)和頭信息 HttpEntity<JSONObject> httpEntity = new HttpEntity(jsonObject,httpHeaders); String url = "http://localhost:8090/youku1327/provider/{id}"; restTemplate.put(url, httpEntity, 1327); }
3.4delete請求示例
DELETE請求參數(shù)說明
第一個參數(shù)是url第二個參數(shù)uri地址路徑變量。
服務端發(fā)布接口
@DeleteMapping("provider/{id}") public ResponseEntity<String> delData(@PathVariable Long id){ String result = "delete"+id+"success"; // delete1327success System.out.println(result); return ResponseEntity.ok(result); }
客戶端調用接口
/* * @Author lsc * @Description <p> delete</p> * @Date 2019/10/18 23:22 * @Param [] * @return void **/ @Test public void testDelete(){ String url = "http://localhost:8090/youku1327/provider/{id}"; restTemplate.delete(url,1327); }
3.5 exchange
參數(shù)說明:
第一個參數(shù)是url。第二個參數(shù)是請求方式。第三個參數(shù)是請求實體。第四個參數(shù)是返回值類型。第五個參數(shù)是uri地址變量。
服務端發(fā)布接口
@GetMapping("user/{name}") public String getUserName(@PathVariable String name){ return name; }
客戶端調用接口
/* * @Author lsc * @Description <p> exchange</p> * @Date 2019/10/18 23:22 * @Param [] * @return void **/ @Test public void testExchange(){ String url = "http://localhost:8090/youku1327/user/{name}"; HttpHeaders httpHeaders = new HttpHeaders(); httpHeaders.setContentType(MediaType.APPLICATION_FORM_URLENCODED); HttpEntity httpEntity = new HttpEntity(httpHeaders); ResponseEntity<String> exchange = restTemplate.exchange(url, HttpMethod.GET, httpEntity, String.class, "youku1327"); System.out.println(exchange.getBody()); }
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關文章
spring task @Scheduled注解各參數(shù)的用法
這篇文章主要介紹了spring task @Scheduled注解各參數(shù)的用法,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-10-10Java 基于UDP協(xié)議實現(xiàn)消息發(fā)送
這篇文章主要介紹了Java 基于UDP協(xié)議實現(xiàn)消息發(fā)送,幫助大家更好的理解和學習Java網(wǎng)絡編程,感興趣的朋友可以了解下2020-11-11SpringCloud之Feign遠程接口映射的實現(xiàn)
這篇文章主要介紹了SpringCloud之Feign遠程接口映射的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-09-09jvm細節(jié)探索之synchronized及實現(xiàn)問題分析
這篇文章主要介紹了jvm細節(jié)探索之synchronized及實現(xiàn)問題分析,涉及synchronized的字節(jié)碼表示,JVM中鎖的優(yōu)化,對象頭的介紹等相關內容,具有一定借鑒價值,需要的朋友可以參考下。2017-11-11