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

如何在Camel REST XML路由中动态设置查询参数值

解决Camel XML路由中动态传递查询参数的问题

你已经找对了方向,问题的核心在于设置CamelHttpQuery时的标签选择!你用了<constant>标签,它会把内容当作纯静态文本处理,完全不会解析里面的${property.id}表达式,所以服务端才会收到编码后的${property.id}字符串。而之前日志能正常打印,是因为<log>的message属性默认支持表达式解析,所以${property.id}被正确替换成了实际值。

修正方案:用<simple>替代<constant>

把设置CamelHttpQuery的<constant>换成<camel:simple>(和其他标签前缀保持一致),simple表达式引擎会自动解析Camel的属性变量:

<camel:setProperty propertyName="id">
    <camel:jsonpath>$.id</camel:jsonpath>
</camel:setProperty>
<camel:log logName="Fuse_Service" message="update Id : ${property.id}"/>
<simple>${property.http_method} == 'PUT'</simple>
<camel:setHeader headerName="Content-Type">
    <constant>application/json</constant>
</camel:setHeader>
<camel:setHeader headerName="CamelHttpMethod">
    <constant>PUT</constant>
</camel:setHeader>
<!-- 替换constant为simple,让表达式被解析 -->
<camel:setHeader headerName="CamelHttpQuery">
    <camel:simple>id=${property.id}</camel:simple>
</camel:setHeader>
<camel:to uri="http4://{{test.api.url}}/test/update" />

另一种更简洁的方式:直接在URI中嵌入表达式

你也可以跳过设置CamelHttpQuery头,直接在http4的URI里用$simple{}语法嵌入变量:

<camel:to uri="http4://{{test.api.url}}/test/update?id=$simple{property.id}" />

这种写法更紧凑,同样能让Camel正确解析property.id的值并拼接到查询参数中。

小提示

尽量保持标签前缀的一致性(要么都用camel:,要么都不用),虽然Camel通常能兼容混合写法,但统一格式会让路由配置更易维护。

内容的提问来源于stack exchange,提问作者wahyu eko hadi saputro

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 20:33:00