如何在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
相关产品推荐
相关产品推荐

