117.4. OGNL 表达式支持


使用 OGNL 时,需要 camel-bean JAR 才能在 classpath 上。

Camel 的 OGNL 支持仅用于调用方法。您不能访问字段。Camel 支持访问 Java 阵列的 length 字段。

Simple 和 Bean 语言现在支持以类似方式调用 Bean 的 Camel OGNL 表示法。假设 Message IN 正文包含一个 POJO,它有一个 getAddress () 方法。

然后,您可以使用 Camel OGNL 表示法访问地址对象:

simple("${body.address}")
simple("${body.address.street}")
simple("${body.address.zip}")
Copy to Clipboard Toggle word wrap

Camel 了解 getters 的简写名称,但您可以调用任何方法或使用实际名称,例如:

simple("${body.address}")
simple("${body.getAddress.getStreet}")
simple("${body.address.getZip}")
simple("${body.doSomething}")
Copy to Clipboard Toggle word wrap

如果正文没有地址,也可以使用 null 安全运算符(?.)来避免 NPE。

simple("${body?.address?.street}")
Copy to Clipboard Toggle word wrap

也可以用 MapList 类型来索引,因此您可以:

simple("${body[foo].name}")
Copy to Clipboard Toggle word wrap

假设正文基于 Map,并使用 foo 作为键查找值,并调用该值上的 getName 方法。

如果键有空格,则必须 使用引号括起键,如 'foo bar':

simple("${body['foo bar'].name}")
Copy to Clipboard Toggle word wrap

您可以使用其密钥名称(带有或没有点)直接访问 MapList 对象:

simple("${body[foo]}")
simple("${body[this.is.foo]}")
Copy to Clipboard Toggle word wrap

假设没有键 foo 的值,那么您可以使用 null 安全运算符来避免 NPE,如下所示:

simple("${body[foo]?.name}")
Copy to Clipboard Toggle word wrap

您还可以访问 List 类型,例如从您可以进行的地址获取行:

simple("${body.address.lines[0]}")
simple("${body.address.lines[1]}")
simple("${body.address.lines[2]}")
Copy to Clipboard Toggle word wrap

有一个特殊的 最后一个 关键字,可用于从列表中获取最后一个值。

simple("${body.address.lines[last]}")
Copy to Clipboard Toggle word wrap

要获得最后 2 个信息,您可以减去一个数字,因此我们可以使用 last-1 来指示以下内容:

simple("${body.address.lines[last-1]}")
Copy to Clipboard Toggle word wrap

最后是课程的第 3 个问题:

simple("${body.address.lines[last-2]}")
Copy to Clipboard Toggle word wrap

您可以使用以下内容调用列表的大小方法

simple("${body.address.lines.size}")
Copy to Clipboard Toggle word wrap

Camel 也支持 Java 阵列的 length 字段,例如:

String[] lines = new String[]{"foo", "bar", "cat"};
exchange.getIn().setBody(lines);

simple("There are ${body.length} lines")
Copy to Clipboard Toggle word wrap

和 yes,您可以将此操作与 Operator 支持相结合,如下所示:

simple("${body.address.zip} > 1000")
Copy to Clipboard Toggle word wrap
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat