77.4. Operator 支持


解析器仅限于支持单个 Operator。

要启用它的值,必须用 $\\{ } 括起来。语法为:

${leftValue} OP rightValue

其中 rightValue 可以是 'null、一个常量值或以 $\{ } 括起的其他表达式的字面值。

注意

Operator 之间必须 有空格。

Camel 将自动键入 rightValue 类型转换为 leftValue 类型,因此它能够将字符串转换为数字,以便您可以将字符串转换为数字值。

支持以下 Operator:

Expand
OperatorDescription

==

equals

=~

等于忽略问题单(在比较字符串值时忽略大小写)

>

大于

>=

大于或等于

<

小于

小于或等于

!=

不等于

!=~

不等于忽略大小写(在比较字符串值时忽略问题单)

contains

测试是否包含在基于字符串的值中

!contains

测试是否没有包含在基于字符串的值中

~~

对于在基于字符串的值中忽略大小写敏感度,用于测试

!~~

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

regex

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

!regex

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

in

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

!in

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

is

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

!is

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

range

若要匹配,如果左侧位于定义为数字的范围,即 from.to

!range

若要匹配,如果左侧左侧不在定义为数字的范围,即 from.to

startsWith

为了测试左侧字符串是否以右手字符串开头。

以 用户身份开始

与 startWith operator 相同。

endsWith

进行测试,请测试左侧字符串以右手字符串结尾。

结束

与 endWith operator 相同。

可以使用以下元运算符:

Expand
OperatorDescription

++

递增一个数字。左侧必须是函数,否则将解析为字面。

 — 

逐个减少一个数字。左侧必须是函数,否则将解析为字面。

\n

使用换行符。

\t

使用制表符。

\r

使用回车返回字符。

\}

使用 } 字符作为文本。使用简单语言构建 JSon 结构时可能需要这样做。

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

Expand
OperatorDescription

&&

logical 和 运算符用于对两个表达式进行分组。

  
 

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

AND 的语法是:

${leftValue} OP rightValue && ${leftValue} OP rightValue

OR 的语法是:

${leftValue} OP rightValue || ${leftValue} OP rightValue

一些示例:

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

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

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

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

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

77.4.1. 与不同类型进行比较

当您与不同类型(如 String 和 int)进行比较时,您必须小心。Camel 将左手中的类型用作1优先级。如果这两个值都无法根据该类型进行比较,则回退到右边类型。
这意味着您可以颠倒值来强制使用特定的类型。假设上面的栏值是一个字符串。然后,您可以加剧:

simple("100 < ${header.bar}")

然后,这将确保 int 类型用作1优先级。

如果 Camel 团队提高了二进制比较操作,则将来可能会更改此设置。它最常是 String 类型,在与数字进行比较时会导致问题。

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

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

而且,一个更高级的示例,正确的值是另一个表达式

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

simple("${header.type} == ${bean:orderService?method=getOrderType}")

以及包含 的示例,并在标题包含 Camel 一词时进行测试

simple("${header.title} contains 'Camel'")

以及带有 regex 的示例,测试该数字标头是 4 个数字值:

simple("${header.number} regex '\\d{4}'")

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

simple("${header.type} in 'gold,silver'")

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

simple("${header.type} !in 'gold,silver'")

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

simple("${header.type} is 'java.lang.String'")

我们为所有 java.lang 类型添加了一个速记,因此您可以将其写成:

simple("${header.type} is 'String'")

还支持范围。范围间隔需要数字,来自 和 结尾。例如,要测试一个值介于 100 到 199 之间:

simple("${header.number} range 100..199")

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

simple("${header.number} range '100..199'")

因为 XML DSL 没有所有功能,因为 Java DSL 及其所有构建程序方法,所以您必须利用其他语言来通过简单的运算符进行测试。现在,您可以使用简单语言进行此操作。在以下示例中,我们要测试标头是小部件顺序:

<from uri="seda:orders">
   <filter>
       <simple>${header.type} == 'widget'</simple>
       <to uri="bean:orderService?method=handleWidget"/>
   </filter>
</from>
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2026 Red Hat
返回顶部