301.5. Operator 支持
解析器仅限于支持单个操作器。
若要启用左侧值,必须用 $\{ } 括起。语法是:
${leftValue} OP rightValue
${leftValue} OP rightValue
其中,右Value
可以是 String 文字,包含在 '
, null
、一个常量值或包含于 $\{ } 的另一个表达式中。
Operator 必须 有空格。
Camel 会自动将右Value 类型转换为 leftValue 类型,因此可以将字符串转换为数字,以便您可以对数值使用 > 比较。
支持以下 Operator:
Operator | 描述 |
---|---|
== | 等于 |
=~ | Camel 2.16: 等于忽略问题单(在比较字符串值时忽略大小写) |
> | 大于 |
>= | 大于等于 |
< | 小于 |
⇐ | 小于或等于 |
!= | 不等于 |
contains | 在基于字符串的值中包含,用于测试 |
不包含 | 要进行测试,如果未包含基于字符串的值 |
~~ | 在基于字符串的值忽略大小写中,要进行测试 |
regex | 针对以 String 值定义的指定正则表达式模式匹配 |
Not regex | 对于不与给定正则表达式模式匹配,定义为 String 值 |
in | 如果在一组值中匹配,则必须用逗号分开每个元素。如果要包含空值,则必须使用双逗号来定义,例如 ',,bronze,silver,gold',它是带有空值的一组四个值,然后是三个 medal。 |
not in | 如果不在一组值中匹配,则必须用逗号分开每个元素。如果要包含空值,则必须使用双逗号来定义,例如 ',,bronze,silver,gold',它是带有空值的一组四个值,然后是三个 medal。 |
is | 对于匹配(如果左侧类型)是值的实例。 |
不是 | 对于匹配,如果左侧类型不是值的实例。 |
range |
对于匹配,如果左边的值位于定义为数字的范围内: |
限制范围 |
如果左侧不在以数字定义的范围内, |
以 | Camel 2.17.1、2.18 :用于测试左侧字符串是否以右手字符串开始。 |
结束 | Camel 2.17.1, 2.18: 用于测试左侧字符串是否以右手字符串结束。 |
然后可以使用以下 unary 运算符:
Operator | 描述 |
---|---|
++ | Camel 2.9: 将数字递增一。左侧必须为某个功能,否则将解析为文字。 |
— | 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: 使用 } 字符作为文本 |
以下逻辑运算符可用于分组表达式:
Operator | 描述 |
---|---|
和 | 弃用的 use && 替代。logical 和 运算符用于对两个表达式进行分组。 |
或者 | 弃用 使用 ||。逻辑或运算符用于对两个表达式进行分组。 |
&& | Camel 2.9: 逻辑和运算符用于对两个表达式进行分组。 |
|| | Camel 2.9: 逻辑或运算符用于对两个表达式进行分组。 |
使用 和,或运算符 在 Camel 2.4 或更早的版本
中,或者只能以简单语言表达式使用 一次。从 Camel 2.5 开始,您可以多次使用这些运算符。
AND 的语法是:
${leftValue} OP rightValue and ${leftValue} OP rightValue
${leftValue} OP rightValue and ${leftValue} OP rightValue
OR 的语法是:
${leftValue} OP rightValue or ${leftValue} OP rightValue
${leftValue} OP rightValue or ${leftValue} OP rightValue
一些示例:
301.5.1. 与不同类型进行比较 复制链接链接已复制到粘贴板!
当您与不同类型(如 String 和 int)进行比较时,您必须小心。Camel 将左手中的类型用作1优先级。如果这两个值都无法根据该类型进行比较,则回退到右边类型。
这意味着您可以颠倒值来强制使用特定的类型。假设上面的栏值是一个字符串。然后,您可以加剧:
simple("100 < ${in.header.bar}")
simple("100 < ${in.header.bar}")
然后,这将确保 int 类型用作1优先级。
如果 Camel 团队对二进制比较操作进行了改变,则最好使用基于字符串的数字类型。它最常是 String 类型,在与数字进行比较时会导致问题。
// testing for null simple("${in.header.baz} == null") // testing for not null simple("${in.header.baz} != null")
// testing for null
simple("${in.header.baz} == null")
// testing for not null
simple("${in.header.baz} != null")
而且,一个更高级的示例,正确的值是另一个表达式
simple("${in.header.date} == ${date:now:yyyyMMdd}") simple("${in.header.type} == ${bean:orderService?method=getOrderType}")
simple("${in.header.date} == ${date:now:yyyyMMdd}")
simple("${in.header.type} == ${bean:orderService?method=getOrderType}")
以及包含 的示例,并在标题包含 Camel 一词时进行测试
simple("${in.header.title} contains 'Camel'")
simple("${in.header.title} contains 'Camel'")
以及带有 regex 的示例,测试该数字标头是 4 个数字值:
simple("${in.header.number} regex '\\d{4}'")
simple("${in.header.number} regex '\\d{4}'")
最后,如果标头等于列表中任何值,则示例。每个元素都必须用逗号分开,且没有空格。
这也适用于数字,因为 Camel 会将每个元素转换为左侧类型。
simple("${in.header.type} in 'gold,silver'")
simple("${in.header.type} in 'gold,silver'")
对于所有最后 3,我们还不支持使用以下内容的 negate 测试:
simple("${in.header.type} not in 'gold,silver'")
simple("${in.header.type} not in 'gold,silver'")
您可以测试该类型是否为特定实例,例如,表示实例是一个字符串
simple("${in.header.type} is 'java.lang.String'")
simple("${in.header.type} is 'java.lang.String'")
我们为所有 java.lang
类型添加了一个速记,因此您可以将其写成:
simple("${in.header.type} is 'String'")
simple("${in.header.type} is 'String'")
还支持范围。范围间隔需要数字,来自 和 结尾。例如,要测试一个值介于 100 到 199 之间:
simple("${in.header.number} range 100..199")
simple("${in.header.number} range 100..199")
请注意,我们在没有空格的范围内使用。
它基于与 Groovy 相同的语法。
从 Camel 2.9 开始,范围值必须采用单引号
simple("${in.header.number} range '100..199'")
simple("${in.header.number} range '100..199'")