一restTemplate簡介
restTemplate底層是基於HttpURLConnection實現的restful風格的接口調用,類似於webservice,rpc遠程調用,但其工作模式更加輕量級,方便於rest請求之間的調用,完成數據之間的交互,在springCloud之中也有一席之地。大致調用過程如下圖,如果想學習其底層具體如何實現可以查看我的文章 restTemplate源碼詳解深入剖析底層實現思路。
二restTemplate常用方法列表
forObeject跟forEntity有什么區別呢?主要的區別是forEntity的功能更加強大一些,其返回值是一個ResponseEntity
2.1 get請求方法預覽
2.2 post方法請求預覽
2.3put請求方法預覽
2.4 delete請求方法預覽
2.5exchange方法預覽
三rest接口調用示例
restTemplate配置
首先本次示例采用的是springboot2.x以上版本,javaSE8;其次發布的服務端是同一台機子,服務端端口8090,客戶端端口8080;類路徑youku1327;在實際工作中最常用是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(){
// 創建一個 httpCilent 簡單工廠
SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory();
// 設置連接超時
factory.setConnectTimeout(15000);
// 設置讀取超時
factory.setReadTimeout(5000);
return factory;
}
}
3.1 get請求接口調用示例
服務費發布的端口
@GetMapping("user")
public String getUser(){
return "youku1327";
}
@GetMapping("user/{name}")
public String getUserName(@PathVariable String name){
return name;
}
客戶端調用
GET參數說明:
- 第一個參數是url。
- 第二個參數是返回值類型。
- 第三個參數是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請求參數說明
- 第一個參數是url。
- 第二個參數是請求參數。
- 第三個參數是返回值類型。
- 第三個參數是uri地址路徑變量。
服務端發布接口
@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);
// 封裝參數和頭信息
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請求參數說明
- 第一個參數是url。
- 第二個參數是請求參數。
- 第三個參數是uri地址路徑變量。
服務端發布接口
@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);
// 封裝參數和頭信息
HttpEntity<JSONObject> httpEntity = new HttpEntity(jsonObject,httpHeaders);
String url = "http://localhost:8090/youku1327/provider/{id}";
restTemplate.put(url, httpEntity, 1327);
}
3.4delete請求示例
DELETE請求參數說明
- 第一個參數是url
- 第二個參數uri地址路徑變量。
服務端發布接口
@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
參數說明:
- 第一個參數是url。
- 第二個參數是請求方式。
- 第三個參數是請求實體。
- 第四個參數是返回值類型。
- 第五個參數是uri地址變量。
服務端發布接口
@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());
}
四關注作者
系統性學習文章和對應的源碼在微信公眾號可獲得。
本套教程
- springboot入門 (1)
- Springboot自定義banner(2)
- springboot配置文件解析(3)
- springboot集成mybatis(4)
- springboot集成jdbcTemplate(5)
- spingboot單元測試(6)
- springboot集成thymeleaf(7)
- springboot多文件上傳(8)
- springboot文件下載(9)
- Springboot自定義異常類(10)
- springboot多環境配置(11)
- springboot自動配置原理解析(12)
- springboot集成restTemplate接口調用(13)
- springboot集成任務調度(14)
- springboot跨域CORS處理(15)
- springboot開啟GIZP壓縮(16)
- springboot集成logback(17)
- springboot集成Swagger(18)
- springboot集成actuator后台監控(19)
- springboot集成mybatis+oracle+druid(20)
- springboot 集成springsession(21)
- springboot集成jwt(22)
- springboot集成admin后台監控(23)
- springboot集成redis基礎篇(24)
- springboot集成redis緩存篇(25)
- springboot使用AOP日志攔截(26)
- springboot集成Validation參數校驗(27)
- springboot集成mybatisPlus(28)
- springboot集成shiro(29)
- springboot實現接口等冪次校驗(30)
- springboot-集成WebSockets(31)
- restTemplate源碼解析(32)
- SpringBoot使用@Async異步調用與線程池(33)
- 待續