欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時間:2022年03月10日 08:55:16   作者:虎哥和你一起學(xué)編程  
這篇文章主要介紹了使用Feign調(diào)用第三方http接口,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

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

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

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

下面就來演示一下

使用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不要和注冊中心的服務(wù)名稱相同,url就是我們要請求的地址。

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

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

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

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

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

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

引入依賴

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

  • 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>

寫接口

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

package com.geewise.ddsp.phonecollect.api;?
import com.alibaba.fastjson.JSONObject;
import feign.Param;
import feign.RequestLine;?
import java.net.MalformedURLException;
?
/**
?* 手機(jī)號查詢地區(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()這一段,下面是判斷,因為是第三方的,不是自己寫的接口,判斷的比較細(xì)了,有點啰嗦。

?/**
? ? ?* 用手機(jī)號查詢所屬地域
? ? ?*
? ? ?* @param phone 手機(jī)號
? ? ?* @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("查詢手機(jī)號所屬地區(qū):" + detailByPhone);
? ? ? ? // 獲取手機(jī)號信息的數(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");
? ? }

深入理解

會用了,再來了解一下。

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

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

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

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

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

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

有時間寫一下和cloud結(jié)合的怎么用

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java IO流深入理解

    Java IO流深入理解

    這篇文章主要介紹了java IO流的深入理解,下面和小編來一起學(xué)習(xí)一下吧,希望能給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容
    2021-07-07
  • lambda表達(dá)式與傳統(tǒng)接口函數(shù)實現(xiàn)方式對比詳解

    lambda表達(dá)式與傳統(tǒng)接口函數(shù)實現(xiàn)方式對比詳解

    這篇文章主要為大家介紹了lambda表達(dá)式與傳統(tǒng)接口函數(shù)實現(xiàn)方式對比詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家度偶多進(jìn)步早日升職加薪
    2022-03-03
  • Mybatis generator如何自動生成代碼

    Mybatis generator如何自動生成代碼

    這篇文章主要介紹了Mybatis generator如何自動生成代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-12-12
  • java使用Feign實現(xiàn)聲明式Restful風(fēng)格調(diào)用

    java使用Feign實現(xiàn)聲明式Restful風(fēng)格調(diào)用

    這篇文章主要為大家詳細(xì)介紹了java使用Feign實現(xiàn)聲明式Restful風(fēng)格調(diào)用,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-04-04
  • AsyncHttpClient KeepAliveStrategy源碼流程解讀

    AsyncHttpClient KeepAliveStrategy源碼流程解讀

    這篇文章主要為大家介紹了AsyncHttpClient KeepAliveStrategy源碼流程解讀,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-12-12
  • 淺談Spring中@NotEmpty、@NotBlank、@NotNull區(qū)別

    淺談Spring中@NotEmpty、@NotBlank、@NotNull區(qū)別

    本文主要介紹了淺談Spring中@NotEmpty、@NotBlank、@NotNull區(qū)別,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-02-02
  • JavaFX如何獲取ListView(列表視圖)的選項

    JavaFX如何獲取ListView(列表視圖)的選項

    這篇文章主要介紹了JavaFX如何獲取ListView(列表視圖)的選項,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • 如何在springboot中實現(xiàn)頁面的國際化

    如何在springboot中實現(xiàn)頁面的國際化

    今天帶大家學(xué)習(xí)如何在springboot中實現(xiàn)頁面的國際化,文中有非常詳細(xì)的圖文解說及代碼示例,對正在學(xué)習(xí)java的小伙伴們有很好地幫助,需要的朋友可以參考下
    2021-05-05
  • springboot實現(xiàn)簡單的消息對話的示例代碼

    springboot實現(xiàn)簡單的消息對話的示例代碼

    本文主要介紹了springboot實現(xiàn)簡單的消息對話的示例代碼,可以使用WebSocket技術(shù),WebSocket是一種在客戶端和服務(wù)器之間提供實時雙向通信的協(xié)議,具有一定的參考價值,感興趣的可以了解一下
    2023-09-09
  • 將Java項目打包成可執(zhí)行的jar包

    將Java項目打包成可執(zhí)行的jar包

    這篇文章主要介紹了將Java項目打包成可執(zhí)行的jar包,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-06-06

最新評論