springboot集成restTemplate實現rest接口調用


一restTemplate簡介

restTemplate底層是基於HttpURLConnection實現的restful風格的接口調用,類似於webservice,rpc遠程調用,但其工作模式更加輕量級,方便於rest請求之間的調用,完成數據之間的交互,在springCloud之中也有一席之地。大致調用過程如下圖,如果想學習其底層具體如何實現可以查看我的文章 restTemplate源碼詳解深入剖析底層實現思路
在這里插入圖片描述

二restTemplate常用方法列表

forObeject跟forEntity有什么區別呢?主要的區別是forEntity的功能更加強大一些,其返回值是一個ResponseEntity ,更加方便我們獲得響應的body,head等信息。exchange方法和其他方法不同之處就是能自己定義的rest請求方式。

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());
    }

四關注作者

系統性學習文章和對應的源碼在微信公眾號可獲得。
在這里插入圖片描述

本套教程


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM