第 31 章 SpEL


概述

Spring Expression Language (SpEL) 是 Spring 3 提供的对象图形导航语言,可用于在路由中构造 predicates 和表达式。SpEL 的显著功能是您可以轻松地访问 registry 中的 Bean。

语法

SpEL 表达式必须使用占位符语法 :{SpelExpression},以便它们可以嵌入到纯文本字符串中(换句话说,SpEL 启用了表达式模板)。

SpEL 也可以使用 @BeanID 语法在注册表(通常是 Spring 注册表)中查找 bean。例如,给定 ID 为 headerUtils、方法 count () (计算当前消息上的标头数量)的 bean,您可以在 SpEL predicate 中使用 headerUtils bean,如下所示:

#{@headerUtils.count > 4}

添加 SpEL 软件包

要在路由中使用 SpEL,您需要在项目中添加对 camel-spring 的依赖关系,如 例 31.1 “添加 camel-spring 依赖项” 所示。

例 31.1. 添加 camel-spring 依赖项

<!-- Maven POM File -->
<properties>
  <camel-version>2.23.2.fuse-7_13_0-00013-redhat-00001</camel-version>
  ...
</properties>

<dependencies>
  ...
  <dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-spring</artifactId>
    <version>${camel-version}</version>
  </dependency>
  ...
</dependencies>

变量

表 31.1 “SpEL 变量” 列出使用 SpEL 时可访问的变量。

表 31.1. SpEL 变量
变量类型描述

Exchange

当前交换是 root 对象。

交换

Exchange

当前交换。

exchangeId

字符串

当前交换的 ID。

例外

Throwable

交换例外(如果有)。

Fulting

消息

故障消息(如果有)。

Request (请求)

消息

交换的 In 消息。

响应

消息

交换的 Out 消息(如果有)。

属性

Map

交换属性。

property (Name)

对象

使用名称 键的交换 属性

property (Name,Type)

类型

使用名称 键的交换 属性 转换为类型 类型

XML 示例

例如,若要仅选择其 Country 标头具有值 USA 的消息,您可以使用以下 SpEL 表达式:

<route>
  <from uri="SourceURL"/>
  <filter>
    <spel>#{request.headers['Country'] == 'USA'}}</spel>
    <to uri="TargetURL"/>
  </filter>
</route>

Java 示例

您可以在 Java DSL 中定义相同的路由,如下所示:

from("SourceURL")
  .filter().spel("#{request.headers['Country'] == 'USA'}")
  .to("TargetURL");

以下示例演示了如何在纯文本字符串中嵌入 SpEL 表达式:

from("SourceURL")
  .setBody(spel("Hello #{request.body}! What a beautiful #{request.headers['dayOrNight']}"))
  .to("TargetURL");
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.