亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

帶查詢參數的 Spring webflux WebTestClient

帶查詢參數的 Spring webflux WebTestClient

臨摹微笑 2023-11-01 21:04:53
在我的 webflux 應用程序中,我有這個GET端點v3/callback?state=cGF5bWVudGlkPTRiMmZlMG我正在嘗試使用編寫集成測試WebTestClient@Testpublic void happyScenario() {    webTestClient.get().uri("/v3/callback?state=cGF5bWVudGlkPTRiMmZlMG")            .exchange()            .expectStatus()            .isOk();}這個測試用例返回404 notFound,如果我刪除了查詢參數,它將被調用,但state參數將丟失我嘗試使用attribute  webTestClient.get().uri("/v3/callback")            .attribute("state","cGF5bWVudGlkPTRiMmZlMG")            .exchange()            .expectStatus()            .isOk();但仍然state缺少參數,使用時如何在請求中包含查詢參數webTestClient?
查看完整描述

3 回答

?
catspeake

TA貢獻1111條經驗 獲得超0個贊

您可以利用UriBuilder.


webTestClient.get()

            .uri(uriBuilder ->

                    uriBuilder

                            .path("/v3/callback")

                            .queryParam("state", "cGF5bWVudGlkPTRiMmZlMG")

                            .build())

            .exchange()

            .expectStatus()

            .isOk();

這應該有效。



查看完整回答
反對 回復 2023-11-01
?
肥皂起泡泡

TA貢獻1829條經驗 獲得超6個贊

如果您的查詢參數值包含大括號,例如如下所示:


webTestClient.get()

    .uri(uriBuilder -> uriBuilder

        .path("/v3/callback")

        .queryParam("query", "{ some { GraphQL { query } } }")

        .build())

    .exchange()

    .expectStatus()

    .isOk();

然后UriBuilder將嘗試對大括號的內容進行變量替換,您可能會在調用時遇到異常build()。為了避免這種情況,請將請求參數放在單獨的requestParams映射中,并通過build(requestParams)在構建時調用來使用受控變量替換URI:


var requestParams = Map.of(

    "query", "{ some { GraphQL { query } } }"

);


webTestClient.get()

    .uri(uriBuilder -> uriBuilder

        .path("/v3/callback")

        .queryParam("query", "{query}")

        .build(requestParams))

    .exchange()

    .expectStatus()

    .isOk();

另一個提示。如果您發現.uri(uriBuilder -> ...)語法有點復雜,您可以URI在請求之前顯式準備:


var requestParams = Map.of(

    "query", "{ some { GraphQL { query } } }"

);


URI uri = new DefaultUriBuilderFactory("/v3/callback")

    .builder()

    .queryParam("query", "{query}")

    .build(requestParams);


webTestClient.get()

    .uri(uri)

    .exchange()

    .expectStatus()

    .isOk();

如果事先準備好 -在調試器中URI檢查生成的內容或記錄它會更容易。URI


查看完整回答
反對 回復 2023-11-01
?
子衿沉夜

TA貢獻1828條經驗 獲得超3個贊

以下是上述內容的 Kotlin 示例


val requestParams = LinkedMultiValueMap<String, String>()

requestParams.add("A", "abc")      

requestParams.add("B", "def")       

requestParams.add("C", "ghi")

 

val uri = UriComponentsBuilder.fromPath("/v3/callback").queryParams(requestParams).build().toUri()   


webTestClient.get().uri{uri}.exchange().expectStatus().isOk


查看完整回答
反對 回復 2023-11-01
  • 3 回答
  • 0 關注
  • 159 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號