如何使用Spring WebClient在GET请求URL中传递JSON参数
问题原因
Spring WebClient的UriBuilder默认会将路径字符串中的{、}识别为URI模板占位符,尝试匹配后续传入的参数进行填充,所以直接拼接包含JSON结构的查询参数会触发模板解析逻辑,不符合需求。
解决方案
下面给出两种可行的实现方式,无需切换HTTP客户端:
方案1:直接构造URI对象,跳过模板解析
直接使用URI.create()构造完整的请求地址传入uri()方法,不会触发WebClient的URI模板解析逻辑:
import java.net.URI; // 核心代码 WebClient.create("https://api.staging.xxxx.com/") .get() .uri(URI.create("locations?where={\"account\":\"bob\"}")) .retrieve() // 后续响应处理逻辑
注意Java字符串中的双引号需要转义,也可以提前将JSON序列化为字符串后拼接。
方案2:通过queryParam单独传递参数(更推荐)
使用UriBuilder的queryParam方法单独传递where参数的值,框架会自动处理特殊字符的URL编码,同时不会触发模板解析:
WebClient.create("https://api.staging.xxxx.com/") .get() .uri(uriBuilder -> uriBuilder.path("locations") .queryParam("where", "{\"account\":\"bob\"}") .build()) .retrieve() // 后续响应处理逻辑
该方式不需要手动处理URL编码,也避免了特殊字符被识别为模板占位符的问题,兼容性更好。
内容的提问来源于stack exchange,提问作者jeff porter
相关产品推荐
相关产品推荐

