304.5. Operator 支持
解析器仅限于只支持单个 Operator。
要启用它,left 值必须包括在 $\{ } 中。语法为:
${leftValue} OP rightValue
${leftValue} OP rightValue
其中 rightValue
可以是以 ' '
、null
、一个恒定值或其他以 $\{ } 括起的表达式的字符串。
运算符 必须 有空格。
Camel 将自动类型将 rightValue 类型转换为 leftValue 类型,因此它可以将字符串转换为数字值,以便您可以使用 > 比较数字值。
支持以下 Operator:
Operator | 描述 |
---|---|
== | 等于 |
=~ | Camel 2.16: 等于忽略大小写(在比较 String 值时忽略大小写) |
> | 大于 |
>= | 大于 or equals |
< | 小于 |
⇐ | 小于 or equals |
!= | not equals |
contains | 如果包含基于字符串的值,则用于测试 |
不包含 | 如果基于字符串的值中没有包含测试 |
~~ | 在基于字符串的值中忽略大小敏感度,则用于测试 |
regex | 对于与给定的正则表达式模式匹配,定义为 String 值 |
非正则表达式 | 对于 不与作为 String 值定义的给定正则表达式模式匹配 |
in | 要在一组值中匹配,每个元素必须用逗号分开。如果要包含空值,则必须使用双逗号(如 ',bronze,silver,gold' )定义它,它是一组带有空值的四个值,然后是三个形形。 |
not in | 若要匹配(如果没有在一组值中),则必须用逗号分隔每个元素。如果要包含空值,则必须使用双逗号(如 ',bronze,silver,gold' )定义它,它是一组带有空值的四个值,然后是三个形形。 |
is | 如果左侧 type 是值的实例,则进行匹配。 |
不是 | 如果左侧类型不是值的实例,则匹配。 |
range |
如果左手位于定义为数字( |
非范围 |
如果左侧不在定义为数字( |
从开始 | Camel 2.17.1, 2.18: 用于测试左侧字符串是否以右手字符串开头。 |
结束 | Camel 2.17.1, 2.18: 用于测试左侧字符串是否以右手字符串结尾。 |
也可以使用以下元运算符:
Operator | 描述 |
---|---|
++ | Camel 2.9: 按数字递增一个。左侧必须是函数,否则解析为 literal。 |
— | Camel 2.9: 减少数字。左侧必须是函数,否则解析为 literal。 |
\ | 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: 使用 carriage 返回字符。 |
\} | Camel 2.18: 使用 } 字符作为文本 |
以下逻辑运算符可用于对表达式进行分组:
Operator | 描述 |
---|---|
和 | 弃用了 use &&。logical 和 运算符用于对两个表达式进行分组。 |
或 | 弃用了 使用 || 替代。logical or 运算符用于对两个表达式进行分组。 |
&& | Camel 2.9: 逻辑和运算符用于对两个表达式进行分组。 |
|| | Camel 2.9: 逻辑或运算符用于对两个表达式进行分组。 |
使用 and
or
operators In Camel 2.4 或更早版本,或者只能以简单的语言表达式使用 一次。从 Camel 2.5 开始,您可以多次使用这些 operator。
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
一些示例:
304.5.1. 与不同类型的比较 复制链接链接已复制到粘贴板!
当您与不同类型(如 String 和 int )进行比较时,您必须小心。Camel 将使用左侧的类型作为 1 个优先级。如果这两个值都无法根据该类型进行比较,并回退到右侧类型。
这意味着您可以利用值来强制执行特定类型的类型。假设上面的 bar 值是一个 String。然后您可以重新利用它:
simple("100 < ${in.header.bar}")
simple("100 < ${in.header.bar}")
然后,确保 int 类型被用作 1st 优先级。
如果 Camel 团队通过 String 增加了首选数字类型的二进制比较操作,则可能会在以后更改。最常见的 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'")
也支持范围。范围间隔需要数字,以及 from 和 end 都包括。例如,要测试值介于 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'")
304.5.2. 使用 Spring XML 复制链接链接已复制到粘贴板!
由于 Spring XML 没有所有具有其各种构建器方法的 Java DSL 电源,所以您必须利用其他语言通过简单操作器进行测试。现在,您可以使用简单的语言进行此操作。在以下示例中,我们需要测试标头是否为小部件顺序: