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

Apache Camel执行PostgreSQL JSON查询报端点参数解析错误如何解决

问题产生原因

Apache Camel 解析数据库组件端点URI时,默认会将?字符识别为URI配置参数的起始分隔符。你写在SQL语句中的JSONPath语法里的?(即过滤条件的起始标记)没有做转义处理,被Camel错误判定为URI参数分隔符,后续的SQL片段就被当成了端点的未知配置参数,最终抛出参数无法识别的异常。
另外你的SQL本身还存在字段路径不匹配的问题:你存储的JSON样本中firstName字段位于extractedData节点下,SQL里写的confirmedData.firstName路径和实际存储结构不一致,即便解决URI解析问题也无法正确匹配数据。

修复方法
  • 方案1:对URI内SQL的特殊字符做URL编码
    如果要直接把SQL写在端点URI中,将SQL里所有的?替换为URL编码值%3F即可,Camel解析URI时会自动将其解码回?传给PostgreSQL执行,转义并修正字段路径后的SQL参考如下:

SELECT doc_payload
from DB.doc_payload
where
jsonb_path_match(identity_verification,'exists($.results.documents[].extractedData.firstName %3F (@ == "ABC"))')
and
jsonb_path_match(identity_verification,'exists($.results.documents[
].document.type %3F (@ == "Driver Licence"))')

- 方案2(推荐):避免直接在URI中传递复杂SQL
不要把长SQL、带特殊字符的SQL直接拼接在端点URI里,可以通过以下方式绕开URI特殊字符解析逻辑:
- 将SQL定义在路由的常量、外部配置文件中,调用组件时直接引用资源
- 给Exchange设置`CamelSqlQuery`消息头,把SQL语句放在消息头里传递,不会经过URI解析流程
- 使用预编译SQL配合参数占位符,从根源上避免特殊字符冲突和SQL注入风险

---
内容的提问来源于stack exchange,提问作者Ashok
相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.31 12:06:19