77.4. Operator 支持
解析器仅限于支持单个 Operator。
要启用它的值,必须用 $\\{ } 括起来。语法为:
${leftValue} OP rightValue
${leftValue} OP rightValue
其中 rightValue
可以是 '
、null
、一个常量值或以 $\{ }
括起的其他表达式的字面值。
Operator 之间必须 有空格。
Camel 将自动键入 rightValue 类型转换为 leftValue 类型,因此它能够将字符串转换为数字,以便您可以将字符串转换为数字值。
支持以下 Operator:
操作符 | 描述 |
---|---|
== | equals |
=~ | 等于忽略问题单(在比较字符串值时忽略大小写) |
> | 大于 |
>= | 大于或等于 |
< | 小于 |
⇐ | 小于或等于 |
!= | 不等于 |
!=~ | 不等于忽略大小写(在比较字符串值时忽略问题单) |
contains | 测试是否包含在基于字符串的值中 |
!contains | 测试是否没有包含在基于字符串的值中 |
~~ | 对于在基于字符串的值中忽略大小写敏感度,用于测试 |
!~~ | 在基于字符串的值中忽略问题单敏感度来进行测试 |
regex | 用于与定义为 String 值的给定正则表达式模式匹配 |
!regex | 对于不匹配给定正则表达式模式,定义为 String 值 |
in | 要在一组值中匹配,每个元素必须以逗号分隔。如果要包含空值,则必须使用双逗号(如 ',bronze,silver,gold')来定义它,这是一组带有空值的四个值,然后是三个组。 |
!in | 若要匹配(如果没有在一组值中),每个元素必须以逗号分隔。如果要包含空值,则必须使用双逗号(如 ',bronze,silver,gold')来定义它,这是一组带有空值的四个值,然后是三个组。 |
is | 如果左侧类型是值的实例,则匹配。 |
!is | 如果左侧类型不是值的实例,则匹配。 |
range |
若要匹配,如果左侧位于定义为数字的范围,即 |
!range |
若要匹配,如果左侧左侧不在定义为数字的范围,即 |
startsWith | 为了测试左侧字符串是否以右手字符串开头。 |
以 用户身份开始 | 与 startWith operator 相同。 |
endwith | 进行测试,请测试左侧字符串以右手字符串结尾。 |
结束 | 与 endWith operator 相同。 |
可以使用以下元运算符:
操作符 | 描述 |
---|---|
++ | 递增一个数字。左侧必须是函数,否则将解析为字面。 |
— | 逐个减少一个数字。左侧必须是函数,否则将解析为字面。 |
\n | 使用换行符。 |
\t | 使用制表符。 |
\r | 使用回车返回字符。 |
\} | 将 } 字符用作文本。使用简单语言构建 JSon 结构时可能需要这样做。 |
以下逻辑运算符可用于对表达式进行分组:
操作符 | 描述 |
---|---|
&& | 逻辑和运算符用于对两个表达式进行分组。 |
逻辑或运算符用于对两个表达式进行分组。 |
AND 的语法是:
${leftValue} OP rightValue && ${leftValue} OP rightValue
${leftValue} OP rightValue && ${leftValue} OP rightValue
OR 的语法是:
${leftValue} OP rightValue || ${leftValue} OP rightValue
${leftValue} OP rightValue || ${leftValue} OP rightValue
一些示例:
77.4.1. 与不同类型的比较 复制链接链接已复制到粘贴板!
当您与 String 和 int 等不同类型的类型进行比较时,您必须小心谨慎。Camel 将使用左侧的类型作为第一优先级。如果这两个值都无法根据这个类型进行比较,并回退到右手类型。
这意味着您可以省略要强制执行特定类型的值。假设上面的 bar 值是一个字符串。然后您可以省略 equation:
simple("100 < ${header.bar}")
simple("100 < ${header.bar}")
然后,这样可确保 int 类型被用作 1st 优先级。
如果 Camel 团队根据数字类型改进二进制比较操作,这将在以后有所变化。最常见的是字符串类型,其在与数字比较时会导致问题。
// testing for null simple("${header.baz} == null") // testing for not null simple("${header.baz} != null")
// 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}")
simple("${header.date} == ${date:now:yyyyMMdd}")
simple("${header.type} == ${bean:orderService?method=getOrderType}")
例如,如果标题包含 Camel 一词,则测试其标题包含:
simple("${header.title} contains 'Camel'")
simple("${header.title} contains 'Camel'")
使用 regex 的示例,测试数字标头是否为 4 位值:
simple("${header.number} regex '\\d{4}'")
simple("${header.number} regex '\\d{4}'")
最后是一个示例,如果标头等于列表中的任何值。每个元素必须以逗号分隔,并且不用空格分开。
这也适用于数字,因为 Camel 会将每个元素转换为左侧类型。
simple("${header.type} in 'gold,silver'")
simple("${header.type} in 'gold,silver'")
对于最后 3 个,我们不支持使用 no 的 negate 测试:
simple("${header.type} !in 'gold,silver'")
simple("${header.type} !in 'gold,silver'")
您也可以测试类型是否为特定实例,例如,例如,字符串
simple("${header.type} is 'java.lang.String'")
simple("${header.type} is 'java.lang.String'")
我们为所有 java.lang
类型添加了简写,以便您可以将其编写为:
simple("${header.type} is 'String'")
simple("${header.type} is 'String'")
还支持范围。范围间隔需要数字,包括 from 和 end。例如,测试一个值是否介于 100 到 199 之间:
simple("${header.number} range 100..199")
simple("${header.number} range 100..199")
请注意,我们在没有空格的情况下在 范围内使用 ..
。它基于与 Groovy 相同的语法。
simple("${header.number} range '100..199'")
simple("${header.number} range '100..199'")
由于 XML DSL 没有作为 Java DSL 及其所有各种构建器方法的所有能力,因此您必须利用一些其他语言来通过简单运算符进行测试。现在,您可以使用简单语言进行此操作。在以下示例中,我们要测试标头是否为小部件顺序:
77.4.2. 使用 和 / 或 复制链接链接已复制到粘贴板!
如果您有两个表达式,您可以将它们与 &
amp;& 或 ||
operator 组合。
例如:
simple("${header.title} contains 'Camel' && ${header.type'} == 'gold'")
simple("${header.title} contains 'Camel' && ${header.type'} == 'gold'")
另外,还支持 ||
。这个示例是:
simple("${header.title} contains 'Camel' || ${header.type'} == 'gold'")
simple("${header.title} contains 'Camel' || ${header.type'} == 'gold'")