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

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

 更新時間:2020年11月23日 14:09:51   作者:iceWang丶  
這篇文章主要介紹了Java 如何使用Feign發(fā)送HTTP請求,幫助大家更好的理解和學(xué)習(xí)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)文章

  • Java語言中&&與& ||與|的區(qū)別是什么

    Java語言中&&與& ||與|的區(qū)別是什么

    這篇文章主要介紹了Java語言中&&與& ||與|的區(qū)別是什么的相關(guān)資料,需要的朋友可以參考下
    2017-04-04
  • JAVA?POI設(shè)置EXCEL單元格格式用法舉例

    JAVA?POI設(shè)置EXCEL單元格格式用法舉例

    這篇文章主要給大家介紹了關(guān)于JAVA?POI設(shè)置EXCEL單元格格式用法的相關(guān)資料,POI中可能會用到一些需要設(shè)置EXCEL單元格格式的操作,需要的朋友可以參考下
    2023-08-08
  • Mybatis Generator Plugin悲觀鎖實現(xiàn)示例

    Mybatis Generator Plugin悲觀鎖實現(xiàn)示例

    本文將從悲觀鎖為例,讓你快速了解如何實現(xiàn)Mybatis Generator Plugin。文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • Java Maven依賴傳遞,可選依賴,排除依賴詳解

    Java Maven依賴傳遞,可選依賴,排除依賴詳解

    這篇文章主要介紹了Java Maven依賴傳遞,可選依賴,排除依賴詳解,文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-09-09
  • java反射方式創(chuàng)建代碼詳解

    java反射方式創(chuàng)建代碼詳解

    在本篇文章里小編給大家整理的是一篇關(guān)于java反射方式創(chuàng)建代碼詳解內(nèi)容,對此有興趣的朋友們可以學(xué)習(xí)下。
    2021-01-01
  • MyBatis別名和settings設(shè)置方式

    MyBatis別名和settings設(shè)置方式

    這篇文章主要介紹了MyBatis別名和settings設(shè)置方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • 使用idea啟動DataX的方法示例

    使用idea啟動DataX的方法示例

    這篇文章主要介紹了使用idea啟動DataX的方法示例,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-01-01
  • SpringBoot框架底層原理解析

    SpringBoot框架底層原理解析

    這篇文章主要介紹了SpringBoot底層原理,包括配置優(yōu)先級的配置方式給大家講解的非常詳細,需要的朋友可以參考下
    2024-03-03
  • 輕量級聲明式的Http庫——Feign的獨立使用

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

    這篇文章主要介紹了輕量級聲明式的Http庫——Feign的使用教程,幫助大家更好的理解和學(xué)習(xí)使用feign,感興趣的朋友可以了解下
    2021-04-04
  • springboot+vue實現(xiàn)SSE服務(wù)器發(fā)送事件的示例

    springboot+vue實現(xiàn)SSE服務(wù)器發(fā)送事件的示例

    本文介紹了使用Spring Boot和Vue實現(xiàn)服務(wù)器發(fā)送事件,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-01-01

最新評論

井冈山市| 璧山县| 揭西县| 长春市| 赣州市| 梧州市| 抚松县| 会东县| 唐山市| 新昌县| 永和县| 河南省| 苍梧县| 阿拉善右旗| 榆社县| 长汀县| 永善县| 清新县| 洱源县| 玛多县| 双江| 清丰县| 大洼县| 汶川县| 潞城市| 夹江县| 昆山市| 惠东县| 长顺县| 林芝县| 南乐县| 敦煌市| 法库县| 瓦房店市| 南召县| 郴州市| 汕尾市| 班玛县| 张家界市| 黑龙江省| 沙坪坝区|