30.5. predicates
概述
您可以通过测试表达式来构造 predicates。例如,predicate, simple ("${header.timeOfDay} == '14:30'")
,测试传入消息中的 timeOfDay
标头是否等于 14:30
。
另外,每当将 resultType
指定为布尔值时,表达式会被评估为 predicate 而不是一个表达式。这允许将 predicate 语法用于这些表达式。
语法
您还可以使用简单 predicates 测试交换(headers、消息正文等)的各种部分。simple predicates 有以下通用语法:
${LHSVariable} Op RHSValue
LHSVariable 左侧的变量是 表 30.1 “简单语言的变量” 中显示的变量之一,右侧手侧的值是 RHSValue 之一:
-
另一个变量
${
RHSVariable}
. -
字符串的字面值,用单引号括起来
' '
。 -
一个数字常量,包含在单引号
'
中。 -
null 对象
null
。
简单的语言始终尝试将 RHS 值转换为 LHS 值的类型。
虽然简单语言将尝试转换 RHS,但根据 Operator,在进行比较前,可能需要将 LHS 转换为适当的类型。
例子
例如,您可以执行简单的字符串比较和数字比较,如下所示:
simple("${in.header.user} == 'john'") simple("${in.header.number} > '100'") // String literal can be converted to integer
您可以测试左侧是否为以逗号分隔的列表的成员,如下所示:
simple("${in.header.type} in 'gold,silver'")
您可以测试左侧是否与正则表达式匹配,如下所示:
simple("${in.header.number} regex '\d{4}'")
您可以使用 is
operator 测试左侧的类型,如下所示:
simple("${in.header.type} is 'java.lang.String'") simple("${in.header.type} is 'String'") // You can abbreviate java.lang. types
您可以测试左侧是否在指定的数字范围内(其中范围包含),如下所示:
simple("${in.header.number} range '100..199'")
组合
您还可以使用逻辑组合, &
amp;& 和 ||
组合 predicates。
例如,以下是一个使用 &
amp;& 组合的表达式(逻辑和):
simple("${in.header.title} contains 'Camel' && ${in.header.type} == 'gold'")
这里是一个使用 ||
组合的表达式(逻辑包含 或):
simple("${in.header.title} contains 'Camel' || ${in.header.type} == 'gold'")