springboot集成restTemplate实现rest接口调用
目錄
?
一restTemplate簡(jiǎn)介
二restTemplate常用方法列表
2.1 get請(qǐng)求方法預(yù)覽
2.2 post方法請(qǐng)求預(yù)覽
2.3put請(qǐng)求方法預(yù)覽
2.4 delete請(qǐng)求方法預(yù)覽
2.5exchange方法預(yù)覽
三rest接口調(diào)用示例
3.1 get請(qǐng)求接口調(diào)用示例
3.2 post請(qǐng)求示例
3.3 put接口調(diào)用示例
3.4delete請(qǐng)求示例
3.5 exchange
?
一restTemplate簡(jiǎn)介
restTemplate底層是基于HttpURLConnection實(shí)現(xiàn)的restful風(fēng)格的接口調(diào)用,類似于webservice,rpc遠(yuǎn)程調(diào)用,但其工作模式更加輕量級(jí),方便于rest請(qǐng)求之間的調(diào)用,完成數(shù)據(jù)之間的交互,在springCloud之中也有一席之地。大致調(diào)用過(guò)程如下圖,如果想學(xué)習(xí)其底層具體如何實(shí)現(xiàn)可以查看我的文章?restTemplate源碼詳解深入剖析底層實(shí)現(xiàn)思路。
二restTemplate常用方法列表
forObeject跟forEntity有什么區(qū)別呢?主要的區(qū)別是forEntity的功能更加強(qiáng)大一些,其返回值是一個(gè)ResponseEntity,更加方便我們獲得響應(yīng)的body,head等信息。exchange方法和其他方法不同之處就是能自己定義的rest請(qǐng)求方式。
2.1 get請(qǐng)求方法預(yù)覽
2.2 post方法請(qǐng)求預(yù)覽
2.3put請(qǐng)求方法預(yù)覽
2.4 delete請(qǐng)求方法預(yù)覽
2.5exchange方法預(yù)覽
三rest接口調(diào)用示例
restTemplate配置
首先本次示例采用的是springboot2.x以上版本,javaSE8;其次發(fā)布的服務(wù)端是同一臺(tái)機(jī)子,服務(wù)端端口8090,客戶端端口8080;類路徑y(tǒng)ouku1327;在實(shí)際工作中最常用是get,post請(qǐng)求方式;restTemplate簡(jiǎn)單配置如下:
3.1 get請(qǐng)求接口調(diào)用示例
服務(wù)費(fèi)發(fā)布的端口
@GetMapping("user")public String getUser(){return "youku1327";}@GetMapping("user/{name}")public String getUserName(@PathVariable String name){return name;}客戶端調(diào)用
GET參數(shù)說(shuō)明:
- 第一個(gè)參數(shù)是url。
- 第二個(gè)參數(shù)是返回值類型。
- 第三個(gè)參數(shù)是uri地址路徑變量。
3.2 post請(qǐng)求示例
POST請(qǐng)求參數(shù)說(shuō)明
- 第一個(gè)參數(shù)是url。
- 第二個(gè)參數(shù)是請(qǐng)求參數(shù)。
- 第三個(gè)參數(shù)是返回值類型。
- 第三個(gè)參數(shù)是uri地址路徑變量。
服務(wù)端發(fā)布接口
@PostMapping("provider")public ResponseEntity<String> addData(@RequestBody JSONObject jsonObject){String user = (String) jsonObject.get("user");return ResponseEntity.ok(user);}客戶端接口調(diào)用
/** @Author lsc* @Description <p> post</p>* @Date 2019/10/18 23:23* @Param []* @return void**/@Testpublic void testPostMethod() throws MalformedURLException {JSONObject jsonObject = new JSONObject();jsonObject.put("user","youku1327");HttpHeaders httpHeaders = new HttpHeaders();// 設(shè)置請(qǐng)求類型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接口調(diào)用示例
PUT請(qǐng)求參數(shù)說(shuō)明
- 第一個(gè)參數(shù)是url。
- 第二個(gè)參數(shù)是請(qǐng)求參數(shù)。
- 第三個(gè)參數(shù)是uri地址路徑變量。
服務(wù)端發(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);}客戶端接口調(diào)用
/** @Author lsc* @Description <p> put</p>* @Date 2019/10/18 23:23* @Param* @return**/@Testpublic void testPutMethod() throws MalformedURLException {JSONObject jsonObject = new JSONObject();jsonObject.put("user","youku1327");HttpHeaders httpHeaders = new HttpHeaders();// 設(shè)置請(qǐng)求類型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請(qǐng)求示例
DELETE請(qǐng)求參數(shù)說(shuō)明
- 第一個(gè)參數(shù)是url
- 第二個(gè)參數(shù)uri地址路徑變量。
服務(wù)端發(fā)布接口
@DeleteMapping("provider/{id}")public ResponseEntity<String> delData(@PathVariable Long id){String result = "delete"+id+"success";// delete1327successSystem.out.println(result);return ResponseEntity.ok(result);}客戶端調(diào)用接口
/** @Author lsc* @Description <p> delete</p>* @Date 2019/10/18 23:22* @Param []* @return void**/@Testpublic void testDelete(){String url = "http://localhost:8090/youku1327/provider/{id}";restTemplate.delete(url,1327);}3.5 exchange
參數(shù)說(shuō)明:
- 第一個(gè)參數(shù)是url。
- 第二個(gè)參數(shù)是請(qǐng)求方式。
- 第三個(gè)參數(shù)是請(qǐng)求實(shí)體。
- 第四個(gè)參數(shù)是返回值類型。
- 第五個(gè)參數(shù)是uri地址變量。
服務(wù)端發(fā)布接口
@GetMapping("user/{name}")public String getUserName(@PathVariable String name){return name;}客戶端調(diào)用接口
/** @Author lsc* @Description <p> exchange</p>* @Date 2019/10/18 23:22* @Param []* @return void**/@Testpublic 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());}?
總結(jié)
以上是生活随笔為你收集整理的springboot集成restTemplate实现rest接口调用的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: springboot+jwt实现toke
- 下一篇: 什么是服务的幂等?为什么要实现幂等?