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

關(guān)于@RequestLine的使用及配置

 更新時間:2022年07月04日 08:53:34   作者:會飛的海碼  
這篇文章主要介紹了關(guān)于@RequestLine的使用及配置方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

@RequestLine的使用及配置

@RequestLine與其它請求不同,只需要簡單寫請求方式和路徑就能達到請求其它服務(wù)的目的。

@FeignClient(value = "feign-server",configuration = FeignConfig.class) ?//需要一個配置文件
public interface TestService {
? ? @RequestLine("POST /feign/test") ? ?//對應請求方式和路徑
? ? String feign(@RequestBody UserDO userDO);
}
@EnableFeignClients
@SpringBootConfiguration
public class FeignConfig {
? ? @Bean
? ? public Contract contract(){
? ? ? ? return new feign.Contract.Default();
? ? }
}

自定義配置feignClient并使用@RequestLine問題

之前在項目里請求三方服務(wù)時,使用的是restTemplate,其在組裝參數(shù)上略顯麻煩,其實我們可以使用openFeign自動的組件去請求三方服務(wù),實現(xiàn)更加優(yōu)雅

步驟

依賴導入這些就不說了,直接進入正題

1. 定義請求接口

其寫法和@FeignClient類似,但要使用來自于openFeign的核心注解@RequestLine,而不是來自MVC的注解@PostMapping、@GetMapping。

public interface DhlApi {
   /**
    * 查詢軌跡
    * @param url
    * @return
    */
   @RequestLine("GET {url}")
   @Headers({
           "Content-Type: application/json",
   })
   DhlActiveQueryResponse queryTrack(@Param("url") String url);
}

2. 定義配置文件,配置請求接口

@Configuration
public class TestFeignConfig {
	// 獲取配置文件,自己用的是apollo
    @ApolloJsonValue("${test.api}")
    private TestISVInfo testIsvInfo;
    @Bean
    public TestISVInfo testIsvApi() throws Exception {
        return Feign.builder()
                .client(client())
                .encoder(new FastJsonEncoder())
                .decoder(new FastJsonDecoder())
                // 連接超時30秒,讀取超時60秒
                .options(new Request.Options(30 * 1000, 60 * 1000))
                // 配置日志
                .logger(new Slf4jLogger(TestFeignConfig.class))
                // 發(fā)生IO異常重試5次,每次重試最小間隔100ms,最大間隔1s,隨著重試次數(shù)遞增
                .retryer(new Retryer.Default())
                .logLevel(Logger.Level.FULL)
                // 注冊feign
                .target(TestIsv.class, testIsvInfo.getDomainUrl());
    }
    private Client client() throws Exception {
    	// 信任策略,設(shè)置為無條件信任
        TrustStrategy acceptingTrustStrategy = (cert, authType) -> true;
        // 設(shè)置ssl配置,由于我們采用無條件信任,所以也不需要加載證書
        SSLContext sslContext = SSLContexts.custom().loadTrustMaterial(null, acceptingTrustStrategy).build();
        // 使用NoopHostnameVerifier關(guān)閉ssl的校驗
        SSLConnectionSocketFactory sslScoketFactory = new SSLConnectionSocketFactory(sslContext,
                NoopHostnameVerifier.INSTANCE);
		
        Registry<ConnectionSocketFactory> socketFactoryRegistry =
                RegistryBuilder.<ConnectionSocketFactory>create()
                        .register("https", sslScoketFactory)
                        .register("http", new PlainConnectionSocketFactory())
                        .build();
        PoolingHttpClientConnectionManager connectionManager =
                new PoolingHttpClientConnectionManager(socketFactoryRegistry);
        CloseableHttpClient httpClient = HttpClients
                .custom()
                .setMaxConnTotal(20)
                .setMaxConnPerRoute(20)
                .setSSLSocketFactory(sslScoketFactory)
                .evictExpiredConnections()
                .evictIdleConnections(20, TimeUnit.SECONDS)
                .setConnectionManager(connectionManager).build();
        return new ApacheHttpClient(httpClient);
    }
}

結(jié)束!就這么簡單。

為什么用的是@RequestLine

這和open-feign的Contract設(shè)計有關(guān)系,Contract是一個注解解析接口,它決定了接口可以使用什么注解轉(zhuǎn)換到http請求。open-feign在使用@FeignClient的情況下,使用的是SpringMvcContract,它使得被@FeignClient修飾的接口,可以使用@GetMapping,@PostMapping等Spring Mvc注解。

如果我們要使用@RequestLine,則需要替換open-Feign的MVC解析器,像這樣

// 在feign上寫上配置
@FeignClient(name = "test-center", configuration = TestFeignConfig .class)
// 配置類
@Configuration
public class TestFeignConfig {
	// 配置feign的注釋解析器為feign默認解析器而不是mvc解析器
    @Bean
    public Contract feignContract() {
        return new feign.Contract.Default();
    }
}

如果我們不單獨配置,則會使用FeignClientsConfiguration中默認配置的SpringMvcContract。

@Bean
@ConditionalOnMissingBean
public Contract feignContract(ConversionService feignConversionService) {
	return new SpringMvcContract(this.parameterProcessors, feignConversionService);
}

那為什么我們通過@Bean形式注冊的feign客戶端就能直接使用@RequestLine呢。因為@Bean形式注冊的feign客戶端不會使用這個配置,而是使用open-feign的默認Contract

打開這個類,我們可以看到它的描述,它的作用可以分為兩個:

  • 定義哪些注解在feign接口上是有校的
  • 定義接口的動作

它的processAnnotationOnMethod(MethodMetadata,Annotation, Method)方法,作用就是解析在feign接口上的注解,并轉(zhuǎn)化為發(fā)送http請求需要的數(shù)據(jù)。

方法代碼:

該類的該方法,只會處理@Body、@RequestLine和@Header 3個注解,如果不是的話,會直接跳過。 針對@RequestLIne

獲取RequstLine的value,使用正則表達式判斷值是否是“GET xxxx”這類的形式,不是就報錯。解析到之后,獲得方法和uri設(shè)置進RequestTemplate中針對@Body

將@Body中的值塞到RequestTemplate的body中針對@Headers

獲取@Header中的值,進行解析,并放入RequestTemplate的Header中

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。 

相關(guān)文章

  • 淺談Spring裝配Bean之組件掃描和自動裝配

    淺談Spring裝配Bean之組件掃描和自動裝配

    本篇文章主要介紹了淺談Spring裝配Bean之組件掃描和自動裝配,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-10-10
  • javabean?中使用@Transient屬性處理臨時字段

    javabean?中使用@Transient屬性處理臨時字段

    @Transient表示該屬性并非一個到數(shù)據(jù)庫表的字段的映射,ORM框架將忽略該屬性,本文給大家介紹javabean?中臨時字段的處理:@Transient,感興趣的朋友跟隨小編一起看看吧
    2023-08-08
  • Java舉例講解分治算法思想

    Java舉例講解分治算法思想

    分治算法的基本思想是將一個規(guī)模為N的問題分解為K個規(guī)模較小的子問題,這些子問題相互獨立且與原問題性質(zhì)相同。求出子問題的解,就可得到原問題的解,本篇文章我們就用分治算法來實現(xiàn)歸并排序快速排序以及二分搜索算法
    2022-04-04
  • Java多態(tài)成員訪問的特點是什么?

    Java多態(tài)成員訪問的特點是什么?

    在上一篇文章中介紹了方法重載和方法重寫的區(qū)別,但是在多態(tài)情況下發(fā)現(xiàn)程序的執(zhí)行結(jié)果和我們預期的不太一樣,這篇將繼續(xù)介紹多態(tài)場景下,Java成員訪問的特點,需要的朋友可以參考下
    2021-06-06
  • Jrebel License Server 激活 IDEA-Jrebel-在線-離線-均適用(推薦)

    Jrebel License Server 激活 IDEA-Jrebel-在線-

    這篇文章主要介紹了Jrebel License Server 激活 IDEA-Jrebel-在線-離線-均適用,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-12-12
  • Mybatis-Plus中分頁插件PaginationInterceptor的使用

    Mybatis-Plus中分頁插件PaginationInterceptor的使用

    我們在開發(fā)的過程中,經(jīng)常會遇到分頁操作,本文主要介紹了Mybatis-Plus中分頁插件PaginationInterceptor的使用,文中通過示例代碼介紹的非常詳細,需要的朋友們下面隨著小編來一起學習學習吧
    2023-06-06
  • Java8新特性之空指針異常的克星Optional類的實現(xiàn)

    Java8新特性之空指針異常的克星Optional類的實現(xiàn)

    這篇文章主要介紹了Java8新特性之空指針異常的克星Optional類的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-10-10
  • 詳解基于Mybatis-plus多租戶實現(xiàn)方案

    詳解基于Mybatis-plus多租戶實現(xiàn)方案

    這篇文章主要介紹了詳解基于Mybatis-plus多租戶實現(xiàn)方案,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-04-04
  • GsonFormat快速生成JSon實體類的實現(xiàn)

    GsonFormat快速生成JSon實體類的實現(xiàn)

    GsonFormat主要用于使用Gson庫將JSONObject格式的String?解析成實體,本文主要介紹了GsonFormat快速生成JSon實體類的實現(xiàn),具有一定的參考價值,感興趣的可以了解一下
    2023-05-05
  • 什么情況下會出現(xiàn)java.io.IOException?:?Broken?pipe這個錯誤以及解決辦法

    什么情況下會出現(xiàn)java.io.IOException?:?Broken?pipe這個錯誤以及解決辦法

    這篇文章主要介紹了什么情況下會出現(xiàn)java.io.IOException?:?Broken?pipe這個錯誤以及解決辦法的相關(guān)資料,這個錯誤表示通信另一端已關(guān)閉連接,常發(fā)生在客戶端關(guān)閉連接、網(wǎng)絡(luò)超時或資源不足等情況,文中將解決辦法介紹的非常詳細,需要的朋友可以參考下
    2024-10-10

最新評論

襄汾县| 香河县| 临邑县| 潞城市| 庆元县| 化德县| 西贡区| 芷江| 高邮市| 丰县| 酉阳| 拉萨市| 邛崃市| 谢通门县| 吐鲁番市| 兴仁县| 临沭县| 张北县| 沅江市| 通州市| 江门市| 科尔| 溆浦县| 宕昌县| 辰溪县| 萨迦县| 龙川县| 通江县| 台州市| 井冈山市| 潞西市| 新竹县| 嘉善县| 瑞金市| 盐亭县| 辽宁省| 沭阳县| 平湖市| 来安县| 江西省| 芜湖市|