3 回答

TA貢獻1111條經驗 獲得超0個贊
您可以利用UriBuilder.
webTestClient.get()
.uri(uriBuilder ->
uriBuilder
.path("/v3/callback")
.queryParam("state", "cGF5bWVudGlkPTRiMmZlMG")
.build())
.exchange()
.expectStatus()
.isOk();
這應該有效。

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

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
添加回答
舉報