You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring WebClient传入含JSON值查询参数时变量展开异常如何解决?

问题根因

你遇到的报错是Spring UriBuilder的默认机制导致的:它会把URI中包含{}的片段识别为URI模板变量,尝试匹配对应变量值做替换。你传入的JSON参数值里的大括号被误识别为模板占位符,系统找不到对应名称的变量才抛出Not enough variable values available to expand异常。

通用解决方案(全参数适用,无需单独处理filter)

只需要修改URI构建逻辑,禁用模板变量解析即可,改法非常简单:

return webClient.get()
  .uri(uriBuilder -> uriBuilder.path("/nodes/last")
        .queryParams(queryParams)
        .build(false)) // 仅新增这一个参数即可
  .header(HttpHeaders.AUTHORIZATION, token)
  .accept(MediaType.APPLICATION_JSON)
  .retrieve()
  .bodyToMono(String.class)
  .log();

build(false)的作用是告知UriBuilder:不需要处理URI模板变量,仅对传入的参数值做标准的URL编码后拼接。不管参数值是JSON还是普通字符串,都可以正常处理,符合你要转发全部参数的需求。

全局配置方案(可选)

如果你这个WebClient实例所有请求都不需要用到URI模板变量功能,可以在初始化时全局配置,后续所有请求都不用单独加build(false):

DefaultUriBuilderFactory uriFactory = new DefaultUriBuilderFactory();
// 关闭模板变量解析,仅做参数编码
uriFactory.setEncodingMode(DefaultUriBuilderFactory.EncodingMode.URI_COMPONENT);

WebClient webClient = WebClient.builder()
        .uriBuilderFactory(uriFactory)
        // 其他配置如baseUrl、拦截器等
        .build();

内容的提问来源于stack exchange,提问作者kamilguti

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 00:36:04