最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

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

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

下面就來(lái)演示一下

使用Feign來(lái)調(diào)用第三方的客戶(hù)端。

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

其中name不要和注冊(cè)中心的服務(wù)名稱(chēng)相同,url就是我們要請(qǐng)求的地址。

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

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

最近做一個(gè)小項(xiàng)目,小到只有一個(gè)頁(yè)面,和幾個(gè)接口而已。

因?yàn)轫?xiàng)目是自己一個(gè)人在做,所以所有的定義都可以自己做主。

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

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

引入依賴(lài)

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

  • core:是必須要引的,核心依賴(lài)。
  • 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>

寫(xiě)接口

下面這個(gè)接口是免費(fèi)的,公開(kāi)的,所以應(yīng)該不會(huì)涉及到利益問(wèn)題。

package com.geewise.ddsp.phonecollect.api;?
import com.alibaba.fastjson.JSONObject;
import feign.Param;
import feign.RequestLine;?
import java.net.MalformedURLException;
?
/**
?* 手機(jī)號(hào)查詢(xún)地區(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()這一段,下面是判斷,因?yàn)槭堑谌降模皇亲约簩?xiě)的接口,判斷的比較細(xì)了,有點(diǎn)啰嗦。

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

深入理解

會(huì)用了,再來(lái)了解一下。

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

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

2、Sax/JAXB(處理xml格式的數(shù)據(jù),因?yàn)槲疫€沒(méi)有接觸到這種格式的,畢竟現(xiàn)在json比較流行嘛,只能先寫(xiě)到這里,用到再說(shuō))

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

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

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

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

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

相關(guān)文章

  • Spring Cloud Ubuntu環(huán)境部署的步驟與注意事項(xiàng)

    Spring Cloud Ubuntu環(huán)境部署的步驟與注意事項(xiàng)

    這篇文章主要給大家介紹了關(guān)于Spring Cloud Ubuntu環(huán)境部署的步驟與注意事項(xiàng),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Spring Cloud具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • Java操作FTP實(shí)現(xiàn)上傳下載功能

    Java操作FTP實(shí)現(xiàn)上傳下載功能

    這篇文章主要為大家詳細(xì)介紹了Java如何通過(guò)操作FTP實(shí)現(xiàn)上傳下載的功能,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Java有一定幫助,需要的可以參考一下
    2022-11-11
  • Rabbitmq中的channel接口常用方法詳解

    Rabbitmq中的channel接口常用方法詳解

    這篇文章主要介紹了Rabbitmq中的channel接口常用方法詳解,為了確保消息一定被消費(fèi)者處理,rabbitMQ提供了消息確認(rèn)功能,就是在消費(fèi)者處理完任務(wù)之后,就給服務(wù)器一個(gè)回饋,服務(wù)器就會(huì)將該消息刪除,需要的朋友可以參考下
    2023-09-09
  • 利用java和sqlserver建立簡(jiǎn)易圖書(shū)管理系統(tǒng)的完整步驟

    利用java和sqlserver建立簡(jiǎn)易圖書(shū)管理系統(tǒng)的完整步驟

    圖書(shū)館管理系統(tǒng)是圖書(shū)館管理工作中不可缺少的部分,它對(duì)于圖書(shū)館的管理者和使用者都非常重要,下面這篇文章主要給大家介紹了關(guān)于利用java和sqlserver建立簡(jiǎn)易圖書(shū)管理系統(tǒng)的完整步驟,需要的朋友可以參考下
    2022-06-06
  • Java 并發(fā)編程:volatile的使用及其原理解析

    Java 并發(fā)編程:volatile的使用及其原理解析

    下面小編就為大家?guī)?lái)一篇Java 并發(fā)編程:volatile的使用及其原理解析。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-05-05
  • SpringBoot 使用Mongo的GridFs實(shí)現(xiàn)分布式文件存儲(chǔ)操作

    SpringBoot 使用Mongo的GridFs實(shí)現(xiàn)分布式文件存儲(chǔ)操作

    這篇文章主要介紹了Spring Boot 使用Mongo的GridFs實(shí)現(xiàn)分布式文件存儲(chǔ)操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • tomcat的keepAlive參數(shù)深入探究

    tomcat的keepAlive參數(shù)深入探究

    這篇文章主要為大家介紹了tomcat的keepAlive參數(shù)深入探究,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-11-11
  • Java?常見(jiàn)排序算法代碼分享

    Java?常見(jiàn)排序算法代碼分享

    這篇文章主要介紹了Java?常見(jiàn)排序算法代碼分享,文章通過(guò)分享詳細(xì)的代碼總結(jié)文章內(nèi)容,具有一定的參考價(jià)值,需要的小伙伴可以參考一下,希望對(duì)你有所幫助
    2022-03-03
  • 在lambda的foreach遍歷中break退出操作(lambda foreach break)

    在lambda的foreach遍歷中break退出操作(lambda foreach break)

    這篇文章主要介紹了在lambda的foreach遍歷中break退出操作(lambda foreach break),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-09-09
  • idea項(xiàng)目報(bào)錯(cuò)缺失maven依賴(lài)問(wèn)題及解決

    idea項(xiàng)目報(bào)錯(cuò)缺失maven依賴(lài)問(wèn)題及解決

    這篇文章主要介紹了idea項(xiàng)目報(bào)錯(cuò)缺失maven依賴(lài)問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2025-03-03

最新評(píng)論

博客| 宣汉县| 吉水县| 理塘县| 通江县| 双流县| 讷河市| 安徽省| 金坛市| 遵化市| 新田县| 新密市| 鸡泽县| 那曲县| 太仓市| 保山市| 德庆县| 古浪县| 江山市| 叶城县| 许昌市| 涪陵区| 万山特区| 长宁区| 吉首市| 太仆寺旗| 湛江市| 贵南县| 沭阳县| 桓台县| 榆林市| 宁武县| 永康市| 丹东市| 团风县| 铅山县| 林州市| 安福县| 克什克腾旗| 桓台县| 平陆县|