搜索

92.4. Operator 支持

download PDF

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

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

${leftValue} OP rightValue

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

注意

Operator 必须具有 空格。

Camel 将自动将 rightValue 类型转换为 leftValue 类型,例如它可以将一个字符串转换为一个数字,因此可以使用 > 来比较数字值。

支持以下 Operator:

Operator描述

==

等于

=~

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

>

大于

>=

大于或等于或等

<

小于

小于或等于不相等

!=

不相等

!=~

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

contains

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

!tains

在基于字符串的值中没有包括测试

~~

在基于字符串的值中忽略问题单敏感度,用于测试

!~~

在基于字符串的值中忽略问题单敏感度,用于测试

regex

对于定义为字符串值的给定正则表达式模式匹配

!regex

与定义为字符串值的给定正则表达式模式匹配

in

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

!in

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

is

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

!is

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

range

对于匹配,如果左侧的值位于定义为 number: from..to. 的一系列值中。

!range

如果左侧的值不在定义为数字的一系列值中,则匹配: from..to .。

startsWith

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

从开始

与 startWith operator 相同。

endsWith

用于测试左侧字符串是否以右手动字符串结尾。

结束

与 endWith 运算符相同。

以下 unary operator 可用于:

Operator描述

++

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

 — 

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

\n

使用换行符:

\t

使用标签字符:

\r

使用 carriage 返回字符。

\}

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

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

Operator描述

&&

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

  
 

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")

92.4.1. 与不同类型的比较

当您将不同的类型(如 String 和 int )进行比较时,您必须小心。Camel 将把左侧的类型用作第 1 个优先级。如果两个值都不能根据该类型进行比较,则回退到右侧类型。
这意味着您可以修改值来强制实施特定类型的。假设上面的 bar 值是一个 String。然后您可以模糊处理:

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

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

如果 Camel 团队改进了二进制比较操作,以首选使用数字类型到字符串,这可能会在以后更改。通常是字符串类型,与数字进行比较时会导致问题。

// 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>

92.4.2. 使用和 / 或

如果您有两个表达式,您可以将它们与 & amp;& 或 || 运算符合并。

例如:

simple("${header.title} contains 'Camel' && ${header.type'} == 'gold'")

在课程中,还支持 ||。示例为:

simple("${header.title} contains 'Camel' || ${header.type'} == 'gold'")
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.