304.5. Operator 支持


解析器仅限于只支持单个操作器。

要启用它,左侧值必须包含在 $\{ } 中。语法是:

${leftValue} OP rightValue
Copy to Clipboard Toggle word wrap

其中 rightValue 可以是以 ' 'null、恒定值或以 $\{ } 括起的另一个表达式的 String 文字。

重要

Operator 必须 有空格。

Camel 将自动将 rightValue 类型转换为 leftValue 类型,因此它能够 eg. 将字符串转换为数字,以便您可以将 > 比较用于数字值。

支持以下 Operator:

Expand
Operator描述

==

等于

=~

Camel 2.16: 等于忽略条件(在比较字符串值时将忽略大小写)

>

大于

>=

大于或等于

<

小于

小于或等于

!=

不等于

contains

用于测试,如果基于字符串的值中包含

不包含

对于测试,如果没有包含在基于字符串的值中

~~

对于测试,通过在基于字符串的值中忽略问题单敏感度来进行测试

regex

针对定义为 String 值的正则表达式模式匹配

Not regex

对于不与作为 String 值定义的给定正则表达式模式匹配

in

要在一组值中匹配,则每个元素必须以逗号分隔。如果要包含空值,则必须使用双逗号定义,例如 ',bronze,silver,gold',它是一个带有空值的四个值,然后是三个 medals。

not in

要在一组值中没有匹配,则每个元素必须以逗号分隔。如果要包含空值,则必须使用双逗号定义,例如 ',bronze,silver,gold',它是一个带有空值的四个值,然后是三个 medals。

is

如果左侧类型是值的实例,则匹配。

not is

如果左侧类型不是值的实例,则匹配。

range

若要匹配,如果左侧位于定义为数字的范围: from..to。从 Camel 2.9 开始,范围值必须用单引号括起。

Not range

如果左侧的值不在定义为 number: from.to 的数值范围内进行匹配。从 Camel 2.9 开始,范围值必须用单引号括起。

从开始

Camel 2.17.1, 2.18: 用于测试左侧字符串是否以右手字符串开头。

结束

Camel 2.17.1, 2.18: 用于测试左侧字符串以右手字符串结尾。

以下 unary operator 可以使用:

Expand
Operator描述

++

Camel 2.9 : 以 1 递增数字。左侧必须是函数,否则作为文字解析。

 — 

Camel 2.9: 减少一个数字。左侧必须是函数,否则作为文字解析。

\

Camel 2.9.3 到 2.10.x 要转义一个值,如 \$,以指示 $ 符号。特殊:将 \n 用于新行,\t 表示选项卡,\r 用于回车。注意: 不支持使用 文件语言进行转义注意: 从 Camel 2.11 开始,转义字符不再被支持,但替换为以下三个特殊的转义。

\n

Camel 2.11: 使用换行符。

\t

Camel 2.11: 使用选项卡字符。

\r

Camel 2.11 : 使用回车返回字符。

\}

Camel 2.18: 使用 } 字符作为文本

以下逻辑运算符可用于对表达式进行分组:

Expand
Operator描述

and

弃用的 use && 替代。逻辑 和 运算符用于对两个表达式进行分组。

or

弃用 || 替代。logical 或 运算符用于对两个表达式进行分组。

&&

Camel 2.9: 逻辑和运算符用于对两个表达式进行分组。

||

Camel 2.9: 逻辑或运算符用于对两个表达式进行分组。

重要

使用 and,or 运算符Camel 2.4 或更旧的 中只能在简单的语言表达式中使用 一次。从 Camel 2.5 开始,您可以多次使用这些 Operator。

AND 的语法是:

${leftValue} OP rightValue and ${leftValue} OP rightValue
Copy to Clipboard Toggle word wrap

而 OR 的语法是:

${leftValue} OP rightValue or ${leftValue} OP rightValue
Copy to Clipboard Toggle word wrap

一些示例:

// exact equals match
simple("${in.header.foo} == 'foo'")

// ignore case when comparing, so if the header has value FOO this will match
simple("${in.header.foo} =~ 'foo'")

// here Camel will type convert '100' into the type of in.header.bar and if it is an Integer '100' will also be converter to an Integer
simple("${in.header.bar} == '100'")

simple("${in.header.bar} == 100")

// 100 will be converter to the type of in.header.bar so we can do > comparison
simple("${in.header.bar} > 100")
Copy to Clipboard Toggle word wrap

304.5.1. 与不同类型的比较

当您与不同类型(如 String 和 int)进行比较时,您必须小心。Camel 将使用左侧的类型作为第一优先级。如果无法根据该类型比较这两个值,并且回退到右侧类型。
这意味着您可以颠倒值来强制执行特定类型的值。假设上面的 bar 值是一个 String。然后您可以反转 equation:

simple("100 < ${in.header.bar}")
Copy to Clipboard Toggle word wrap

然后,这样可确保 int 类型用作第一优先级。

如果 Camel 团队改进二进制比较操作来首选基于 String 的数字类型,则以后可能会更改此设置。最常见的是 String 类型,与数字进行比较时会导致问题。

// testing for null
simple("${in.header.baz} == null")

// testing for not null
simple("${in.header.baz} != null")
Copy to Clipboard Toggle word wrap

以及一些更高级的示例,其中正确的值是另一个表达式

simple("${in.header.date} == ${date:now:yyyyMMdd}")

simple("${in.header.type} == ${bean:orderService?method=getOrderType}")
Copy to Clipboard Toggle word wrap

和包含 的例子,测试标题是否包含 Camel 一词

simple("${in.header.title} contains 'Camel'")
Copy to Clipboard Toggle word wrap

和带有 regex 的示例,测试数字标头是否为 4 位值:

simple("${in.header.number} regex '\\d{4}'")
Copy to Clipboard Toggle word wrap

如果标头等于列表中的任何值,则最后是一个示例。每个元素必须用逗号分开,并且没有空格。
这也适用于数字等,因为 Camel 会将每个元素转换为左侧类型的类型。

simple("${in.header.type} in 'gold,silver'")
Copy to Clipboard Toggle word wrap

对于最后 3,我们也支持使用以下内容的 negate 测试:

simple("${in.header.type} not in 'gold,silver'")
Copy to Clipboard Toggle word wrap

您可以测试该类型是否是特定的实例,例如,一个字符串

simple("${in.header.type} is 'java.lang.String'")
Copy to Clipboard Toggle word wrap

我们为所有 java.lang 类型添加了简写,以便您可以将其写为:

simple("${in.header.type} is 'String'")
Copy to Clipboard Toggle word wrap

也支持范围。范围间隔需要数字,并且来自 和 end 都包含。例如,测试值是否为 100 到 199 之间:

simple("${in.header.number} range 100..199")
Copy to Clipboard Toggle word wrap

请注意,我们在没有空格的范围中使用 ..。它采用与 Groovy 相同的语法。

Camel 2.9 开始,范围值必须使用单引号

simple("${in.header.number} range '100..199'")
Copy to Clipboard Toggle word wrap

304.5.2. 使用 Spring XML

由于 Spring XML 没有任何权限作为其各种构建器方法的 Java DSL,因此您必须利用其他语言来测试简单操作器。现在,您可以使用简单语言进行此操作。在以下示例中,我们希望测试标头是否为小部件顺序:

<from uri="seda:orders">
   <filter>
       <simple>${in.header.type} == 'widget'</simple>
       <to uri="bean:orderService?method=handleWidget"/>
   </filter>
</from>
Copy to Clipboard Toggle word wrap
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2025 Red Hat