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

輕量級聲明式的Http庫——Feign的獨立使用

 更新時間:2021年04月28日 14:21:11   作者:coding途中  
這篇文章主要介紹了輕量級聲明式的Http庫——Feign的使用教程,幫助大家更好的理解和學(xué)習(xí)使用feign,感興趣的朋友可以了解下

前沿

項目中我們經(jīng)常會使用HTTP工具向外部的REST接口發(fā)送請求,大家一般使用Okhttp,或者java的HttpClient發(fā)起,今天給大家介紹一款輕量級聲明式的Http庫(FeignClient),使用起來會使我們的項目代碼更整潔,利于維護!

快速開始

Feign是spring cloud中服務(wù)消費端的調(diào)用框架,通常與ribbon,hystrix等組合使用。 但是在某些項目中,由于遺留原因,整個系統(tǒng)并不是spring cloud項目,甚至不是spring項目,而使用者關(guān)注的重點僅僅是簡化http調(diào)用代碼的編寫。 如果采用httpclient或者okhttp這樣相對較重的框架,對初學(xué)者來說編碼量與學(xué)習(xí)曲線都會是一個挑戰(zhàn),而使用spring中RestTemplate,又沒有配置化的解決方案,由此想到是否可以脫離spring cloud,獨立使用Feign。

引入依賴

      <dependency>
            <groupId>com.netflix.feign</groupId>
            <artifactId>feign-core</artifactId>
            <version>8.18.0</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/com.netflix.feign/feign-gson -->
        <dependency>
            <groupId>com.netflix.feign</groupId>
            <artifactId>feign-gson</artifactId>
            <version>8.18.0</version>
        </dependency>

定義接口

public interface OuterService {
    
    @RequestLine("GET /requesr/list?name={name}")
    @Headers("Authorization: Basic  {token}")
    String request(@Param(value = "name") String name,@Param(value = "token") String token);
}

通過@RequestLine指定HTTP請求方式及URL地址,@Param指定參數(shù),可以在url或者header中使用{參數(shù)名}去填充請求參數(shù)。

配置類

OuterService service = Feign.builder()
            .options(new Options(1000, 3500))
            .retryer(new Retryer.Default(5000, 5000, 3))
            .target(OuterService.class, http://127.0.0.1:8085);

開始調(diào)用

service.request("test","ad12hj3bhj1b23hj1b2");

json序列化

在項目中,我們發(fā)起的Http請求往往都是json格式,feign同樣提供基于json的對象轉(zhuǎn)換工具,方便我們直接以對象形式交互。

接口層面指定header:

@Headers({"Content-Type: application/json","Accept: application/json"})

指定Encoder跟Decoder

## 指定Gson序列化。也可以使用Jackson序列化(引入其依賴)
OuterService service = Feign.builder()
                .encoder(new GsonEncoder())
                .decoder(new GsonDecoder())
                .options(new Options(1000, 3500))
                .retryer(new Retryer.Default(5000, 5000, 3))
                .target(OuterService.class, http://127.0.0.1:8085);

支持我們完成聲明式Http接口調(diào)用

使用攔截器

在配置代理類時可以自定義攔截器

OuterService service = Feign.builder()
                .encoder(new GsonEncoder())
                .decoder(new GsonDecoder())
                .requestInterceptor(template -> {
                    // template 可以獲取/修改body,header等信息
                })
                .options(new Options(1000, 3500))
                .retryer(new Retryer.Default(5000, 5000, 3))
                .target(OuterService.class, http://127.0.0.1:8085);

注解詳解

@RequestLine("GET /messages/detail")

指定請求方式跟請求URL

    ## get請求
    @RequestLine("GET /messages/detail?msg_ids={msgIds}")
    ## post請求
    @RequestLine("POST /messages/detail?msg_ids={msgIds}")

@Param("name")

綁定參數(shù)別名,可以在RequestLine/body/headers等注解中通過{參數(shù)名}去獲取值。

@Headers({"Accept:/", "Accept-Language: zh-cn"})

指定請求header

@Body("{name}")

指定請求返回body值為請求參數(shù)name

@QueryMap

只能標(biāo)注在方法參數(shù)上。用于傳遞多個查詢值,拼接在URL后面,只能標(biāo)注在Map類型的參數(shù)前面,否則報錯。

@HeaderMap

同上,只是用在Header上而已

以上就是輕量級聲明式的Http庫——Feign的使用的詳細內(nèi)容,更多關(guān)于Feign的使用的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Java多線程并發(fā)synchronized?關(guān)鍵字

    Java多線程并發(fā)synchronized?關(guān)鍵字

    這篇文章主要介紹了Java多線程并發(fā)synchronized?關(guān)鍵字,Java?在虛擬機層面提供了?synchronized?關(guān)鍵字供開發(fā)者快速實現(xiàn)互斥同步的重量級鎖來保障線程安全。
    2022-06-06
  • Spring的事務(wù)機制實例代碼

    Spring的事務(wù)機制實例代碼

    這篇文章主要介紹了Spring的事務(wù)機制實例代碼,分享了相關(guān)代碼示例,小編覺得還是挺不錯的,具有一定借鑒價值,需要的朋友可以參考下
    2018-02-02
  • 如何在Eclipse中設(shè)置Oracle的JDBC

    如何在Eclipse中設(shè)置Oracle的JDBC

    以下是對在Eclipse中設(shè)置Oracle的JDBC的具體操作方法進行了詳細的分析介紹,需要的朋友可以過來參考下
    2013-08-08
  • java-collection中的null,isEmpty用法

    java-collection中的null,isEmpty用法

    這篇文章主要介紹了java-collection中的null,isEmpty用法,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • IDEA關(guān)閉git管理,文件變成紅色解決方案

    IDEA關(guān)閉git管理,文件變成紅色解決方案

    在軟件開發(fā)中,當(dāng)一個文件夾內(nèi)的Java項目啟用Git版本控制,通常會導(dǎo)致該文件夾下所有項目同步開啟Git,這種做法有助于保持項目的一致性和可追溯性,但也可能帶來管理上的復(fù)雜性,如果需要解除某個項目的Git管理,可以通過IDE的設(shè)置選項進行調(diào)整
    2024-10-10
  • Java String保存字符串的機制

    Java String保存字符串的機制

    Java中字符串以什么格式來存儲?Java 中的 Unicode 字符串會按照 Latin1或者 UTF16 的編碼格式保存在 String 中,本文就詳細的介紹了一下,感興趣的可以了解一下
    2021-05-05
  • java設(shè)計模式學(xué)習(xí)之代理模式

    java設(shè)計模式學(xué)習(xí)之代理模式

    這篇文章主要為大家詳細介紹了java設(shè)計模式學(xué)習(xí)之代理模式的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-10-10
  • Java 正則表達式詳細使用

    Java 正則表達式詳細使用

    這篇文章主要介紹了Java 正則表達式詳細使用,非常不錯,具有參考借鑒價值,需要的朋友參考下吧
    2017-10-10
  • SpringBoot中的Mybatis依賴問題

    SpringBoot中的Mybatis依賴問題

    這篇文章主要介紹了SpringBoot中的Mybatis依賴問題,包括pom導(dǎo)入依賴和相關(guān)實例代碼講解,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-04-04
  • Spring中的@Qualifier注解和@Resource注解區(qū)別解析

    Spring中的@Qualifier注解和@Resource注解區(qū)別解析

    這篇文章主要介紹了Spring中的@Qualifier注解和@Resource注解區(qū)別解析,@Qualifier注解的用處是當(dāng)一個接口有多個實現(xiàn)的時候,為了指名具體調(diào)用哪個類的實現(xiàn),@Resource注解可以通過 byName命名和byType類型的方式注入,需要的朋友可以參考下
    2023-11-11

最新評論

青田县| 滕州市| 忻城县| 阳山县| 孝义市| 汤原县| 德安县| 汤原县| 黔南| 浦城县| 喀喇沁旗| 祁东县| 南溪县| 平泉县| 浪卡子县| 广东省| 策勒县| 靖宇县| 永泰县| 太仆寺旗| 永昌县| 乐安县| 嘉祥县| 招远市| 永仁县| 汨罗市| 浏阳市| 庄浪县| 石嘴山市| 铜陵市| 涿州市| 固安县| 怀宁县| 尚义县| 昆明市| 昭觉县| 金溪县| 太原市| 清水县| 武冈市| 股票|