1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        spring-boot之webflux簡單入門 - 中

        共 10317字,需瀏覽 21分鐘

         ·

        2021-07-31 01:57

        前言

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

        今天我們學(xué)習(xí)的重點(diǎn)是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填寫相對接口地址,則會報如下錯誤信息:

        示例講解

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

        請求類型

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

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

        get客戶端配置

        當(dāng)然,還有很多配置項是不一樣的,在上面的示例中,我們是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/pdf、text/htmlimage/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)配置就先到這里吧,下面簡單測試下。

        測試

        下面我們分別運(yù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);    
         }

        然后運(yùn)行下看看:

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

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

        總結(jié)

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

        - END -


        瀏覽 91
        點(diǎn)贊
        評論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報
        評論
        圖片
        表情
        推薦
        點(diǎn)贊
        評論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            首屈一指视频在线观看 | 婷婷激情综合五月天 | 欧美破处视频在线观看 | 亚洲va欧美va天堂v国产桃 | 夜夜高潮久久做爽久久 | 色综合天天爱综合网 | 我要看操小嫩逼 | 久久骚逼 | 免费看国产精品 | 99婷婷 |