国产成人精品18p,天天干成人网,无码专区狠狠躁天天躁,美女脱精光隐私扒开免费观看

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

發(fā)布時(shí)間:2021-07-17 21:51 來(lái)源:腳本之家 閱讀:0 作者:coding途中 欄目: 編程語(yǔ)言 歡迎投稿:712375056

目錄

    前沿

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

    快速開(kāi)始

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

    引入依賴(lài)

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

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

    配置類(lèi)

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

    開(kāi)始調用

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

    json序列化

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

    接口層面指定header:

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

    指定Encoder跟Decoder

    ## 指定Gson序列化。也可以使用Jackson序列化(引入其依賴(lài))
    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接口調用

    使用攔截器

    在配置代理類(lèi)時(shí)可以自定義攔截器

    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, );

    注解詳解

    @RequestLine("GET /messages/detail")

    指定請求方式跟請求URL

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

    @Param("name")

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

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

    指定請求header

    @Body("{name}")

    指定請求返回body值為請求參數name

    @QueryMap

    只能標注在方法參數上。用于傳遞多個(gè)查詢(xún)值,拼接在URL后面,只能標注在Map類(lèi)型的參數前面,否則報錯。

    @HeaderMap

    同上,只是用在Header上而已

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

    免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng )、來(lái)自本網(wǎng)站內容采集于網(wǎng)絡(luò )互聯(lián)網(wǎng)轉載等其它媒體和分享為主,內容觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如侵犯了原作者的版權,請告知一經(jīng)查實(shí),將立刻刪除涉嫌侵權內容,聯(lián)系我們QQ:712375056,同時(shí)歡迎投稿傳遞力量。

    亚洲夜夜欢A∨一区二区三区| 亚洲精品成人片在线播放| 免费A级毛片无码A∨蜜芽18禁| 18禁美女黄网站色大片免费看| 午夜无码片在线观看影视| 国产JIZZJIZZ麻豆全部免费|