<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          spring-boot之webflux簡單入門 - 中

          共 10317字,需瀏覽 21分鐘

           ·

          2021-07-31 01:57

          前言

          昨天我們通過一個簡單實例,演示了webfluxWebMVC的簡單區(qū)別,同時也展示了webflux的基本工作流程,今天我來繼續(xù)學(xué)習(xí)webflux的相關(guān)知識。

          今天我們學(xué)習(xí)的重點是webflux的客戶端,我們想通過webflux客戶端來了解webflux的相關(guān)基礎(chǔ)知識,包括接口請求方式、響應(yīng)類別、傳參等

          webflux客戶端

          簡單示例

          webflux的客戶端用起來很方便,也很簡單,我們先看這樣一段代碼:

           WebClient client = WebClient.create("http://localhost:8999");
                  Mono<String> stringMono = client.get()
                          .uri("/webflux/hi")
                          .attribute("name""syske")
                          .accept(MediaType.APPLICATION_JSON)
                          .retrieve()
                          .bodyToMono(String.class);
                  String block = stringMono.block();
                  System.out.println("返回結(jié)果:" + block);

          第一行代碼就是實例化一個weClient對象,需要注意的是,這里實例化的時候,也可以不指定服務(wù)器地址,如果不指定服務(wù)器地址的話,就需要我們在uri方法中指定完整的接口地址:

          WebClient client = WebClient.create();
                  Mono<String> stringMono = client.get()
                          .uri("http://localhost:8999/webflux/hi")
                          ···

          如果不指定服務(wù)器地址,且uri填寫相對接口地址,則會報如下錯誤信息:

          示例講解

          下面我們就來詳細解釋下上面webfluxClient的代碼。

          請求類型

          client.get()表示創(chuàng)建一個get請求對象(本質(zhì)上是一個RequestHeadersUriSpec對象),他還支持post、putdeleteoptions,也就是我們restful的所有協(xié)議。

          對于不同的請求類型,我們配置的請求參數(shù)是不一樣的,但是uri方法都是通用的。

          get客戶端配置

          當然,還有很多配置項是不一樣的,在上面的示例中,我們是get請求,我們可以配置如下參數(shù):

          • 請求地址中的參數(shù):也就是url中的參數(shù),可以通過attributes方法設(shè)置
          Mono<String> stringMono = client.get()
                          .uri("/webflux/hi")
                          .attribute("name""syske")
                          ···
          • cookie信息
          Mono<String> stringMono = client.get()
                          .uri("/webflux/hi")
                          .cookie("syske""yyds")
                          ···
          • 響應(yīng)頭的字符編碼
          Mono<String> stringMono = client.get()
                          .uri("/webflux/hi")
                          .acceptCharset(Charset.defaultCharset())
                          ···
          • 設(shè)置響應(yīng)類型

          也就是我們常用的媒體類型,包括application/json、application/pdftext/html、image/jpeg等待

          Mono<String> stringMono = client.get()
                          .uri("/webflux/hi")
              .accept(MediaType.APPLICATION_JSON)
              ···
          • 獲取響應(yīng)設(shè)置對象
          Mono<String> stringMono = client.get()
                          .uri("/webflux/hi")
              .retrieve()
              ···
          • 配置響應(yīng)對象

          這里配置的類型要與服務(wù)器端對應(yīng),否則會在類型轉(zhuǎn)換時報錯

          Mono<String> stringMono = client.get()
                          .uri("/webflux/hi")
              .bodyToMono(String.class);
              ···
          • 執(zhí)行調(diào)用,獲取響應(yīng)數(shù)據(jù)

          經(jīng)過我的測試,我發(fā)現(xiàn)真正調(diào)用服務(wù)器是在我們執(zhí)行block方法之后,之前的操作都是未來配置客戶端請求數(shù)據(jù)。

          String block = stringMono.block();
          post客戶端配置

          對于post配置,除了我們前面和get一樣的配置外(get的都支持),它還支持以下參數(shù):

          • 設(shè)置請求頭類型
          Mono<String> stringMono2 = client.post()                
                  .uri("/webflux/hi")                
                  .acceptCharset(Charset.defaultCharset())                
                  .header("token:1234567")    
                  .contentType(MediaType.APPLICATION_JSON)
          • 設(shè)置其他請求頭信息
          Mono<String> stringMono2 = client.post()                
              .uri("/webflux/hi")    
              .headers(httpHeaders -> {                    
                  httpHeaders.add(HttpHeaders.ACCEPT_CHARSET, "UTF-8");                
              })

          好了,客戶端的相關(guān)配置就先到這里吧,下面簡單測試下。

          測試

          下面我們分別運行getpost兩種客戶端,訪問我們的兩個接口,看下效果。

          首選是我們的接口,第一個是get接口,第二個是post接口:

          接口路由配置

          測試代碼如下

           public static void main(String[] args) {        
             WebClient client = WebClient.create("http://localhost:8999");        
             Mono<String> stringMono = client.get()                
                 .uri("/webflux/hi")                
                 .acceptCharset(Charset.defaultCharset())                
                 .header("token:1234567")                
                 .cookie("syske""yyds")                
                 .attribute("name""syske")                
                 .accept(MediaType.APPLICATION_JSON)                
                 .retrieve()                
                 .bodyToMono(String.class);        
                 String block = stringMono.block();        
                 System.out.println("返回結(jié)果:" + block);   

             Mono<String> stringMono2 = client.post()                
                 .uri("/webflux/hi2")                
                 .acceptCharset(Charset.defaultCharset())                
                 .header("token:1234567")                
                 .headers(httpHeaders -> {                    
                     httpHeaders.add(HttpHeaders.ACCEPT_CHARSET, "UTF-8");                
                 })                
                 .contentType(MediaType.APPLICATION_JSON)                
                 .cookie("syske""yyds")                
                 .attribute("name""syske")                
                 .accept(MediaType.APPLICATION_JSON)                
                 .retrieve()                
                 .bodyToMono(String.class);        
             String block1 = stringMono2.block();        
             System.out.println("block1" + block1);    
           }

          然后運行下看看:

          可以看到我們前面設(shè)置的數(shù)據(jù)都可以拿到,比如cookiecontentType。

          下面是運行結(jié)果:

          總結(jié)

          今天時間有點緊張,搞了一天企業(yè)微信isv環(huán)境,現(xiàn)在環(huán)境還是時好時壞,而且中午時間也比較緊張,所以webflux的相關(guān)內(nèi)容也就沒梳理完,不過webfluxClient也算基本上分享完了,明天繼續(xù)來分享webflux其他相關(guān)知識。

          - END -


          瀏覽 91
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  特黄AAAAAAAA片免费直播 | 国产乱伦一级 | 青青青在线视频 | 大屌视频网 | 一级成人毛片 |