溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何使用Feign調(diào)用第三方http接口

發(fā)布時間:2022-03-10 10:24:44 來源:億速云 閱讀:962 作者:iii 欄目:開發(fā)技術

本篇內(nèi)容介紹了“如何使用Feign調(diào)用第三方http接口”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠?qū)W有所成!

Feign調(diào)用第三方http接口

我們平常在開發(fā)的時候,經(jīng)常會碰到調(diào)用第三方的接口,這個時候我們可以使用httpClient或者restTemplate,但是這兩種方式相比較與Feign調(diào)用,都會麻煩一點兒。

Feign是聲明式服務調(diào)用客戶端,既規(guī)范又簡潔,幫我們屏蔽了http調(diào)用的復雜性,而且完美切入springcloud技術體系。

下面就來演示一下

使用Feign來調(diào)用第三方的客戶端。

@FeignClient(name = "my-feign-client", url = "http://**")
public interface MyFeignClient{  
   @RequestMapping(value = "**", method = RequestMethod.GET)
   ResponseEntity getMsg(@RequestParam("token") String token);    
}

其中name不要和注冊中心的服務名稱相同,url就是我們要請求的地址。

通過上面就可以看出非常的簡單,而且序列化啥的都幫我們做好了,不用我們關心,值得嘗試 

原生Feign調(diào)用第三方接口

最近做一個小項目,小到只有一個頁面,和幾個接口而已。

因為項目是自己一個人在做,所以所有的定義都可以自己做主。

項目的目的是為了推送給第三方頁面收集到的數(shù)據(jù),所以對接是重頭戲。

之前對接過各種第三方短信接口,用的無非是httpClient的get/post,用多了就想換一個技術熟悉一下。

引入依賴

啥也不說,先引入一堆東西,不是每一個都有用,但是用到了就很方便。

  • core:是必須要引的,核心依賴。

  • gson/jackson:gson我的代碼中有用到,處理json數(shù)據(jù)。

<dependency>
    <groupId>io.github.openfeign</groupId>
    <artifactId>feign-core</artifactId>
    <version>9.5.0</version>
</dependency>
<dependency>
    <groupId>com.netflix.feign</groupId>
    <artifactId>feign-gson</artifactId>
    <version>8.18.0</version>
</dependency>
<dependency>
    <groupId>io.github.openfeign</groupId>
    <artifactId>feign-slf4j</artifactId>
    <version>9.5.0</version>
</dependency>
<dependency>
    <groupId>io.github.openfeign</groupId>
    <artifactId>feign-hystrix</artifactId>
    <version>9.5.0</version>
</dependency>
<dependency>
    <groupId>io.github.openfeign</groupId>
    <artifactId>feign-jackson</artifactId>
    <version>9.5.0</version>
</dependency>

寫接口

下面這個接口是免費的,公開的,所以應該不會涉及到利益問題。

package com.geewise.ddsp.phonecollect.api; 
import com.alibaba.fastjson.JSONObject;
import feign.Param;
import feign.RequestLine; 
import java.net.MalformedURLException;
 
/**
 * 手機號查詢地區(qū)
 */
public interface DetailPhoneClient {
    /**
     * http://mobsec-dianhua.baidu.com/dianhua_api/open/location?tel=13322222222&qq-pf-to=pcqq.c2c
     * response:{"response":{"13322222222":{"detail":{"area":[{"city":"大連"}],"province":"遼寧","type":"domestic","operator":"電信"},"location":"遼寧大連電信"}},"responseHeader":{"status":200,"time":1539141421138,"version":"1.1.0"}}
     * @param tel
     * @return
     */
    @RequestLine("GET /open/location?tel={tel}&qq-pf-to=pcqq.c2c")
    JSONObject getDetailByPhone(@Param(value = "tel") String tel);
}

使用

在controller層中可以直接調(diào)用,直接上代碼 。

最重要的地方就是Feign.builder()這一段,下面是判斷,因為是第三方的,不是自己寫的接口,判斷的比較細了,有點啰嗦。

 /**
     * 用手機號查詢所屬地域
     *
     * @param phone 手機號
     * @return 所屬地域
     */
    private String getCityByPhone(String phone) {
        DetailPhoneClient detailPhoneClient = Feign.builder()
                .decoder(new GsonDecoder())
                .target(DetailPhoneClient.class, "http://mobsec-dianhua.baidu.com/dianhua_api");
        JSONObject detailByPhone = detailPhoneClient.getDetailByPhone(phone);
        logger.info("查詢手機號所屬地區(qū):" + detailByPhone);
        // 獲取手機號信息的數(shù)據(jù)
        if (!detailByPhone.containsKey("response")) {
            return null;
        }
        JSONObject response = detailByPhone.getJSONObject("response");
        if (!response.containsKey(phone)) {
            return null;
        }
        JSONObject phoneDetail = response.getJSONObject(phone);
        if (!phoneDetail.containsKey("detail")) {
            return null;
        }
        JSONObject detail = phoneDetail.getJSONObject("detail");
        if (!detail.containsKey("area")) {
            return null;
        }
        JSONArray area = detail.getJSONArray("area");
        if (area.size() == 0) {
            return null;
        }
        JSONObject cityJsonObject = area.getJSONObject(0);
        if (!cityJsonObject.containsKey("city")) {
            return null;
        }
        return cityJsonObject.getString("city");
    }

深入理解

會用了,再來了解一下。

權威的寶典:github-openfeign(由于這個寫的比較通俗易懂,又比較權威,所以代碼就不copy過來了,省時省力)

1、Gson/Jackson(處理json格式的數(shù)據(jù))兩者都包括一個編碼器,一個解碼器

2、Sax/JAXB(處理xml格式的數(shù)據(jù),因為我還沒有接觸到這種格式的,畢竟現(xiàn)在json比較流行嘛,只能先寫到這里,用到再說)

3、OkHttp,JAX-RS,Ribbon(負載均衡),Hystrix(熔斷機制)。這幾個都沒有用到,等用到了 ,再上官網(wǎng)上查吧

4、可以在接口上添加header,具體的可以上githua上面查

@Headers("Content-Type: application/xml")

“如何使用Feign調(diào)用第三方http接口”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關的知識可以關注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實用文章!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。

AI