rest - Webclient复杂查询产生java.lang.IllegalArgumentException
问题描述
我正在尝试发送一个复杂的查询 http://myserver:1234/api/v1/query?query=(sum(cluster_health{Component='kafka'}))/count(cluster_health{Component='kafka'}) ";
java.lang.IllegalArgumentException: Not enough variable values available to expand 'Component=\'kafka\''
我阅读了有关此异常的信息并发现
在Spring 中使用 RestTemplate。异常 - 没有足够的变量可扩展 讨论了使用 POST 来处理复杂的查询。如何将查询放在请求正文中?我尝试了几种方法,但总是得到错误的数据回复。
使用 {sort} 并使用特殊字符定义排序字符串 WebClient 将如何工作?我尝试了以下方法,但没有奏效。
字符串 DPCOMP="{Component="kafka"}";
Mono responseMono = this.webClient.get() .uri(uriBuilder -> uriBuilder .queryParam("query", "(sum(sa_cluster_health{DPCOMP}))", DPCOMP) .build()) .retrieve() .bodyToMono( PrometheusResponse.class);
谢谢。
解决方案
我最终通过实现两者来使其工作:
- 禁用编码(设置为 NONE)
- 对 uri 中的所有 ( ) / { } '" 使用 ascii 代码 (%ascii_code) 并且它有效。Ascii 代码可以从 https://www.rapidtables.com/code/text/ascii-table 获得。 html
推荐阅读
- laravel - Eloquent Query:所有具有相同类别的新闻。数据透视表
- node.js - 通过 npm 安装程序使用 nodejs 安装 React.js 代码后未运行
- javascript - 计算 Kintone 中的单选按钮值
- swift - 在 SwiftUI 中动态隐藏视图
- laravel-5 - strpos() 期望参数 1 是字符串,给定数组 - 当我进行雄辩的查询时
- vhdl - 我对 vhdl 中的当前时间有一些疑问
- c++ - 如何计算 C++ std::map 中不同值的数量
- google-cloud-functions - 使用 Node.js 从 Cloud Functions 读取 Cloud Bigtable 需要 > 1500 毫秒
- android - 通过通知操作安排 WorkManager 工作人员
- azure - 天蓝色负载均衡器可以启动/停止虚拟机吗?