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

为何在Camel路由定义中需用${body}而非{{body}}?

问题:Camel路由中{{body}}占位符未按文档生效,${body}却正常运行

Camel文档指出属性占位符采用{{prop_name}}格式,但定义如下路由时,使用{{body}}无法得到预期输出:

<route>
    <from uri="timer:test-timer?period=5000" />
    <setBody>
        <simple>Hello world!</simple>
    </setBody>
    <log message="Body: {{body}}" />
</route>

而使用${body}则可正常运行:

<route>
    <from uri="timer:test-timer?period=5000" />
    <setBody>
        <simple>Hello world!</simple>
    </setBody>
    <log message="Body: ${body}" />
</route>

请问为何此处属性占位符替换未按文档生效?

原因解析

这是因为Camel中的两种占位符属于完全不同的替换机制:

  • {{prop_name}}是配置属性占位符,作用是读取静态配置(比如外部配置文件、环境变量或Camel上下文预定义的属性),替换过程在路由启动阶段完成,无法访问Exchange运行时的动态数据(如body、header这类随请求变化的Exchange变量)。
  • ${body}是Simple表达式语言的语法,专门用于访问Exchange运行时的动态内容,在路由执行到对应节点时,会实时从当前Exchange实例中取出body的值进行替换。

此处要访问的是Exchange的body,属于运行时动态数据,因此必须使用Simple表达式的${body}语法;而{{body}}只会去查找名为body的静态配置项,找不到则原样输出,自然无法得到预期结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 09:43:19