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

Java 如何使用Feign發(fā)送HTTP請求

 更新時間:2020年11月23日 14:09:51   作者:iceWang丶  
這篇文章主要介紹了Java 如何使用Feign發(fā)送HTTP請求,幫助大家更好的理解和學習Java,感興趣的朋友可以了解下

在往常的 HTTP 調(diào)用中,一直都是使用的官方提供的 RestTemplate 來進行遠程調(diào)用,該調(diào)用方式將組裝代碼冗余到正常業(yè)務(wù)代碼中,不夠優(yōu)雅,因此在接觸到 Feign 后,考慮使其作為一個 HTTP 發(fā)送基礎(chǔ),來進行遠程調(diào)用。

下面就讓我們來看一下,其是如何使用的。

引入依賴

首先,我們需要將 Feign 的基礎(chǔ)依賴引入項目,因為我們只使用 Feign 的 remote 功能,因此,只引入基礎(chǔ)依賴。

此外在項目中,我們還自定義了了 JSON 轉(zhuǎn)換和 log 設(shè)置,因此還需要引入這些的第三方依賴,如下所示。

   <!-- feign -->
    <dependency>
      <groupId>io.github.openfeign</groupId>
      <artifactId>feign-core</artifactId>
      <version>10.10.1</version>
    </dependency>
    <dependency>
      <groupId>io.github.openfeign</groupId>
      <artifactId>feign-gson</artifactId>
      <version>10.10.1</version>
    </dependency>
    <dependency>
      <groupId>io.github.openfeign</groupId>
      <artifactId>feign-slf4j</artifactId>
      <version>10.10.1</version>
    </dependency>

發(fā)送路徑和方法設(shè)置

然后,因為 Feign 是一種申明式的調(diào)用,因此我們需要配置發(fā)送的接口路徑和發(fā)送接口定義,看下面的例子。

  @RequestLine("GET /user/getone?arkOrgId={arkOrgId}&userId={userId}")
  JSONObject getOneStaff(@Param("arkOrgId") String arkOrgId,@Param("userId") String userId);

  @RequestLine("POST /user/add")
  @Headers("Content-Type: application/json")
  @Body("{body}")
  JSONObject saveStaff(@Param("body") SaveEmployeeDTO saveEmployeeDTO);

在代碼實例中,我們定義了兩種發(fā)送的實例,一種是 GET 請求,一種是 POST 請求,下面,我們分別來看一下其中的代碼的作用是什么。

  • @RequestLine:定義發(fā)送方式和發(fā)送接口定義,其中用 GET 和 POST 來定義發(fā)送方式,然后空格后,寫上 servelt path(context path 和域名或ip端口號在其他地方配置);
  • {}:用來作為占位符,動態(tài)填充需要的參數(shù);
  • @Param:用來匹配 URI 中的占位符;
  • @Headers("Content-Type: application/json"):構(gòu)建請求表頭,在 POST 請求中,需要聲明該請求的發(fā)送格式為 json;
  • @Body:POST 請求,需要標注請求體;
  • JSONObject:在本實例中,采用是一個通用的 json 對象來接收,方便統(tǒng)一,在自己的代碼中,也可以定義一個接受實體類來接受,作用是一樣的。

POST 請求,需要在實體中重寫 toString() 方法,使其在發(fā)送時調(diào)用該方法后,是一個 JSON 字符串,詳細見后文 Tips 中寫的。

定義發(fā)送客戶端

@Configuration
public class FeignConfig {
  public static final String DATE_TIME_FORMAT = "yyyy-MM-dd HH:mm:ss";
  @Value("${staff.base.url}")
  private String staffBaseUrl;
  @Bean
  public StaffFeignService staffFeignService() {
    GsonBuilder builder = new GsonBuilder();
    builder.setDateFormat(DATE_TIME_FORMAT);
    return Feign.builder()
        .retryer(closeFeignRetry())
        .decoder(new GsonDecoder(builder.create()))
        .encoder(new GsonEncoder())
        .logger(new Slf4jLogger())
        .logLevel(Logger.Level.FULL)
        .target(StaffFeignService.class, staffBaseUrl);
  }
  /**
   * 關(guān)閉feign的失敗重試功能
   */
  @Bean
  public Retryer closeFeignRetry() {
    return Retryer.NEVER_RETRY;
  }

  @Bean
  public Request.Options options() {
    return new Request.Options(15000, 30000);
  }
}

緊接著,我們來定義發(fā)送客戶端。

首先,我們采用 @Value 來動態(tài)添加路由,這樣,就可以根據(jù)在配置文件中的屬性來添加 context path,從而做到可拓展。

然后,feign 的很多配置都是可以根據(jù)自身項目需要在 DIY 的,因此在這里,我們配置了編解碼采用 GSON 的編解碼器,日志級別設(shè)置全打印。通過該設(shè)置來生成一個 Feign 客戶端。

Feign 官方文檔,在官方文檔中,有詳細的配置說明,根據(jù)自身需要使用,即可。

使用

@Autowired
StaffFeignService staffFeignService;

// get 請求
JSONObject saveSingleQrCode = staffFeignService.saveSingleQrCode(userId);

// post 請求
SaveMultiQrCodesDTO saveMultiQrCodesDTO = new SaveMultiQrCodesDTO();;
JSONObject saveMultiQrCodes = staffFeignService.saveMultiQrCodes(saveMultiQrCodesDTO);

通過該方式,即可發(fā)送對應(yīng)請求。

Tips

記錄一些在使用中的重點,需要注意。

重寫 toString() 方法
在發(fā)送 JSON 時,需要重寫 toString() 方法,否則會導(dǎo)致接受方,無法用 json 進行解析。

  @Override
  public String toString() {
    return JSON.toJSONString(this);
  }

異步客戶端

有時候,我們使用異步發(fā)送,從而不影響我們的主體業(yè)務(wù),F(xiàn)eign 也支持該種配置。

  @Bean
  public IHermesFeignService hermesFeignService() {
    GsonBuilder builder = new GsonBuilder();
    builder.setDateFormat(DATE_TIME_FORMAT);
    return AsyncFeign.asyncBuilder()
        .decoder(new GsonDecoder(builder.create()))
        .encoder(new GsonEncoder(builder.create()))
        .logger(new Slf4jLogger())
        .logLevel(Logger.Level.FULL)
        .target(IHermesFeignService.class, hermesBaseUrl);
  }

重點,就是在構(gòu)建 Feign 時,采用 AsyncFeign.asyncBuilder() 來進行構(gòu)建。

以上就是Java 如何使用Feign發(fā)送HTTP請求的詳細內(nèi)容,更多關(guān)于使用Feign發(fā)送HTTP請求的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Spring AOP注解實戰(zhàn)指南

    Spring AOP注解實戰(zhàn)指南

    在現(xiàn)代軟件開發(fā)中,面向切面編程(AOP)是一種強大的編程范式,本文將介紹如何在Spring框架中通過AspectJ注解以及對應(yīng)的XML配置來實現(xiàn)AOP,在不改變主業(yè)務(wù)邏輯的情況下增強應(yīng)用程序的功能,需要的朋友可以參考下
    2024-06-06
  • Spring boot2基于Mybatis實現(xiàn)多表關(guān)聯(lián)查詢

    Spring boot2基于Mybatis實現(xiàn)多表關(guān)聯(lián)查詢

    這篇文章主要介紹了Spring boot2基于Mybatis實現(xiàn)多表關(guān)聯(lián)查詢,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-04-04
  • Java實現(xiàn)解析zip壓縮包并獲取文件內(nèi)容

    Java實現(xiàn)解析zip壓縮包并獲取文件內(nèi)容

    這篇文章主要為大家詳細介紹了如何利用Java語言實現(xiàn)頁面上傳一個源碼壓縮包,后端將壓縮包解壓,并獲取每個文件中的內(nèi)容,感興趣的可以動手嘗試一下
    2022-07-07
  • Java技術(shù)匯總

    Java技術(shù)匯總

    本篇文章主要對Java基本知識點和技術(shù)點的一些看法和介紹,具有很好的參考價值。下面跟著小編一起來看下吧
    2017-03-03
  • Java中的線程同步與ThreadLocal無鎖化線程封閉實現(xiàn)

    Java中的線程同步與ThreadLocal無鎖化線程封閉實現(xiàn)

    這篇文章主要介紹了Java中的線程同步與ThreadLocal無鎖化線程封閉實現(xiàn),Synchronized關(guān)鍵字與ThreadLocal變量的使用是Java中線程控制的基礎(chǔ),需要的朋友可以參考下
    2016-03-03
  • mybatis generator 配置 反向生成Entity簡單增刪改查(推薦)

    mybatis generator 配置 反向生成Entity簡單增刪改查(推薦)

    這篇文章主要介紹了mybatis generator 配置 反向生成Entity簡單增刪改查(推薦)的相關(guān)資料,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2016-12-12
  • Java 中 Form表單數(shù)據(jù)的兩種提交方式

    Java 中 Form表單數(shù)據(jù)的兩種提交方式

    本文給大家分享java中form表單數(shù)據(jù)的兩種提交方式,分別是get從制定的服務(wù)器中獲取數(shù)據(jù),pos方式提交數(shù)據(jù)給指定的服務(wù)器處理,本文給大家介紹的非常詳細,需要的朋友參考下吧
    2016-12-12
  • 如何使用Code128字體將文本轉(zhuǎn)換為code128條形碼

    如何使用Code128字體將文本轉(zhuǎn)換為code128條形碼

    這篇文章主要介紹了如何使用Code128字體將文本轉(zhuǎn)換為code128條形碼 ,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-04-04
  • Java?WorkBook對Excel的基本操作方法

    Java?WorkBook對Excel的基本操作方法

    這篇文章主要介紹了Java?WorkBook對Excel的基本操作方法,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-03-03
  • SpringBoot中事務(wù)失效的原因詳解

    SpringBoot中事務(wù)失效的原因詳解

    這篇文章主要介紹了SpringBoot中事務(wù)失效的原因詳解,spring中的事務(wù)是依賴AOP的,AOP是通過動態(tài)代理實現(xiàn)的,只有通過代理類訪問的方法才能被攔截,需要的朋友可以參考下
    2023-10-10

最新評論