通过 spring 网络客户端发送 json 字符串作为查询参数

Sending a json string as query parameter via spring web client

我正在尝试使用下面的代码使用 Spring WebClient 发送 json 字符串作为查询参数。

var client = WebClient.builder()
         .baseUrl(baseurl)
         .defaultHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE)
         .build()
client.post().uri(uriBuilder -> uriBuilder.path("/api/SomeRequest")
                  .queryParam("response", responseJsonStr).build()   
                  ).retrieve().bodyToMono(ReponseObj.class).block()

我看到一个错误

java.lang.IllegalArgumentException: Not enough variables available to expand questionKey.

根据我所做的搜索,我可以看出问题出在我作为查询参数提供的 Json 字符串(它有“{”和“}”)。我认为这可能与 URI 编码有关。但是查看有关 encoding 的详细信息,我不确定解决此问题的最佳方法是什么。 注意:我无法更改期望 Json 字符串作为查询参数的服务器(它稍后在提取查询参数后解码 json)。

看起来你知道发送一个 json 字符串作为查询参数而不是 post 正文是一个非常糟糕的主意,所以我不会进一步讨论它。

你是对的。您必须在客户端对查询参数进行编码才能使其正常工作。您可以像这样简单地编码参数:

.queryParam("response", URLEncoder.encode(responseJsonStr, StandardCharsets.UTF_8))

只要确保您使用与服务器端相同的字符集即可。