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

輕量級(jí)聲明式的Http庫(kù)——Feign的獨(dú)立使用

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

前沿

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

快速開(kāi)始

Feign是spring cloud中服務(wù)消費(fèi)端的調(diào)用框架,通常與ribbon,hystrix等組合使用。 但是在某些項(xiàng)目中,由于遺留原因,整個(gè)系統(tǒng)并不是spring cloud項(xiàng)目,甚至不是spring項(xiàng)目,而使用者關(guān)注的重點(diǎn)僅僅是簡(jiǎn)化http調(diào)用代碼的編寫(xiě)。 如果采用httpclient或者okhttp這樣相對(duì)較重的框架,對(duì)初學(xué)者來(lái)說(shuō)編碼量與學(xué)習(xí)曲線(xiàn)都會(huì)是一個(gè)挑戰(zhàn),而使用spring中RestTemplate,又沒(méi)有配置化的解決方案,由此想到是否可以脫離spring cloud,獨(dú)立使用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請(qǐng)求方式及URL地址,@Param指定參數(shù),可以在url或者h(yuǎn)eader中使用{參數(shù)名}去填充請(qǐng)求參數(shù)。

配置類(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)始調(diào)用

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

json序列化

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

接口層面指定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://127.0.0.1:8085);

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

使用攔截器

在配置代理類(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, http://127.0.0.1:8085);

注解詳解

@RequestLine("GET /messages/detail")

指定請(qǐng)求方式跟請(qǐng)求URL

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

@Param("name")

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

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

指定請(qǐng)求header

@Body("{name}")

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

@QueryMap

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

@HeaderMap

同上,只是用在Header上而已

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

相關(guān)文章

最新評(píng)論