Springboot集成restTemplate過(guò)程詳解
一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ò)程如下圖

二restTemplate常用方法列表
forObeject跟forEntity有什么區(qū)別呢?主要的區(qū)別是forEntity的功能更加強(qiáng)大一些,其返回值是一個(gè)ResponseEntity
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)單配置如下:
/**
* @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)建一個(gè) httpCilent 簡(jiǎn)單工廠
SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory();
// 設(shè)置連接超時(shí)
factory.setConnectTimeout(15000);
// 設(shè)置讀取超時(shí)
factory.setReadTimeout(5000);
return factory;
}
}
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地址路徑變量。
/*
* @Author lsc
* @Description <p> 獲得無(wú)參的get請(qǐng)求 </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請(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
**/
@Test
public 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
**/
@Test
public 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";
// delete1327success
System.out.println(result);
return ResponseEntity.ok(result);
}
客戶端調(diào)用接口
/*
* @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ù)說(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
**/
@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());
}
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Java實(shí)現(xiàn)駝峰與下劃線互轉(zhuǎn)的方法
這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)駝峰與下劃線互轉(zhuǎn)的方法,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-04-04
spring task @Scheduled注解各參數(shù)的用法
這篇文章主要介紹了spring task @Scheduled注解各參數(shù)的用法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-10-10
Java實(shí)現(xiàn)簡(jiǎn)易學(xué)籍管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)簡(jiǎn)易學(xué)籍管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-02-02
Java 基于UDP協(xié)議實(shí)現(xiàn)消息發(fā)送
這篇文章主要介紹了Java 基于UDP協(xié)議實(shí)現(xiàn)消息發(fā)送,幫助大家更好的理解和學(xué)習(xí)Java網(wǎng)絡(luò)編程,感興趣的朋友可以了解下2020-11-11
Java Date與String的相互轉(zhuǎn)換詳解
這篇文章主要介紹了Java Date與String的相互轉(zhuǎn)換詳解的相關(guān)資料,需要的朋友可以參考下2017-02-02
SpringCloud之Feign遠(yuǎn)程接口映射的實(shí)現(xiàn)
這篇文章主要介紹了SpringCloud之Feign遠(yuǎn)程接口映射的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09
如何解決@Valid對(duì)象嵌套List對(duì)象校驗(yàn)無(wú)效問(wèn)題
這篇文章主要介紹了如何解決@Valid對(duì)象嵌套List對(duì)象校驗(yàn)無(wú)效問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-07-07
jvm細(xì)節(jié)探索之synchronized及實(shí)現(xiàn)問(wèn)題分析
這篇文章主要介紹了jvm細(xì)節(jié)探索之synchronized及實(shí)現(xiàn)問(wèn)題分析,涉及synchronized的字節(jié)碼表示,JVM中鎖的優(yōu)化,對(duì)象頭的介紹等相關(guān)內(nèi)容,具有一定借鑒價(jià)值,需要的朋友可以參考下。2017-11-11
Java中.divide()方法使用及注意事項(xiàng)詳解
divide方法就是bigdecimal類中的一個(gè)除法計(jì)算方法,由于該divide方法參數(shù)類型眾多并且不易理解容易出現(xiàn)錯(cuò)誤,這篇文章主要給大家介紹了關(guān)于Java中.divide()方法使用及注意事項(xiàng)的相關(guān)資料,需要的朋友可以參考下2024-03-03

