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
添加回答
举报