4.4. 配置 REST DSL


使用 Java 配置

在 Java 中,您可以使用 restConfiguration () 构建器 API 配置 REST DSL。例如,要将 REST DSL 配置为使用 Servlet 组件作为底层实现:

restConfiguration().component("servlet").bindingMode("json").port("8181")
    .contextPath("/camel-example-servlet-rest-blueprint/rest");
Copy to Clipboard Toggle word wrap

使用 XML 配置

在 XML 中,您可以使用 restConfiguration 元素配置 REST DSL。例如,要将 REST DSL 配置为使用 Servlet 组件作为底层实现:

<?xml version="1.0" encoding="UTF-8"?>
<blueprint ...>
  ...
  <camelContext xmlns="http://camel.apache.org/schema/blueprint">
    ...
    <restConfiguration component="servlet"
                       bindingMode="json"
                       contextPath="/camel-example-servlet-rest-blueprint/rest"
                       port="8181">
      <dataFormatProperty key="prettyPrint" value="true"/>
    </restConfiguration>
    ...
  </camelContext>

</blueprint>
Copy to Clipboard Toggle word wrap

配置选项

表 4.3 “配置 REST DSL 的选项” 显示使用 restConfiguration () builder (Java DSL)或 restConfiguration 元素(XML DSL)配置 REST DSL 的选项。

Expand
表 4.3. 配置 REST DSL 的选项
Java DSLXML DSL描述

component()

@component

指定用作 REST 传输的 Camel 组件(如 servletrestletspark-rest 等等)。该值可以是标准组件名称,也可以是自定义实例的 bean ID。如果没有指定这个选项,Camel 在 classpath 或 bean registry 上查找 RestConsumerFactory 实例。

scheme()

@scheme

用于公开 REST 服务的协议。取决于底层 REST 的实现,但通常支持 httphttps。默认为 http

host()

@host

用于公开 REST 服务的主机名。

port()

@port

用于公开 REST 服务的端口号。

注: 此设置被 Servlet 组件 忽略,后者使用容器的标准 HTTP 端口。如果是 Apache Karaf OSGi 容器,标准 HTTP 端口通常为 8181。对于 JMX 和工具而言,最好设置端口值 none。

contextPath()

@contextPath

为 REST 服务设置前导上下文路径。这可用于使用 context-path 设置部署部署 Web 应用的组件,如 Servlet。

hostNameResolver()

@hostNameResolver

如果没有显式设置主机名,此解析器决定 REST 服务的主机。可能的值有 RestHostNameResolver.localHostName (Java DSL)或 localHostName (XML DSL),它解析为主机名格式; 和 RestHostNameResolver.localIp (Java DSL)或 localIp (XML DSL),它解析为点十进制 IP 地址格式。从 Camel 2.17 RestHostNameResolver.allLocalIp 可以用来解析为所有本地 IP 地址。

默认值为 localHostName,最多是 Camel 2.16。从 Camel 2.17 的默认值为 LocalIp

bindingMode()

@bindingMode

为 JSON 或 XML 格式消息启用绑定模式。可能的值有: offautojsonxmljson_xml。默认为 off

skipBindingOnErrorCode()

@skipBindingOnErrorCode

指定是否跳过输出绑定,如果存在自定义 HTTP 错误代码标头。这样,您可以构建不绑定到 JSON 或 XML 的自定义错误消息,因为成功消息会这样做。默认为 true

enableCORS()

@enableCORS

如果为 true,请在 HTTP 响应中启用 CORS (跨原始资源共享)标头。默认为 false

jsonDataFormat()

@jsonDataFormat

指定 Camel 用于实施 JSON 数据格式的组件。可能的值有: json-jackson,json-gson,json-xstream.默认为 json-jackson

xmlDataFormat()

@xmlDataFormat

指定 Camel 用于实施 XML 数据格式的组件。可能的值有: jaxb.默认为 jaxb

componentProperty()

componentProperty

允许您在底层 REST 实施中设置任意 组件级别 属性。

endpointProperty()

endpointProperty

允许您在底层 REST 实现上设置任意 端点级别 属性。

consumerProperty()

consumerProperty

允许您在底层 REST 实施上设置任意 消费者端点 属性。

dataFormatProperty()

dataFormatProperty

允许您在底层数据格式组件上设置任意属性(例如,Jackson 或 JAXB)。从 Camel 2.14.1 开始,您可以将以下前缀附加到属性键:

  • json.in
  • json.out
  • xml.in
  • xml.out

将属性设置限制为特定的格式类型(JSON 或 XML),以及特定的消息方向(INOUT)。

corsHeaderProperty()

corsHeaders

允许您指定自定义 CORS 标头,作为键/值对。

默认 CORS 标头

如果启用了 CORS (跨原始资源共享),则默认设置以下标头。您可以通过调用 corsHeaderProperty DSL 命令来覆盖默认设置。

Expand
表 4.4. 默认 CORS 标头
标头密钥标头值

Access-Control-Allow-Origin

\*

access-Control-Allow-Methods

获取、HEAD、POST放置删除、TRACE、选项连接补丁

Access-Control-Allow-Headers

origin,Accept,X-Requested-With,Content-Type,Access-Control-Request-Method,Access-Control-Request-Headers

Access-Control-Max-Age

3600

启用或禁用 Jackson JSON 功能

您可以通过在 dataFormatProperty 选项中配置以下键来启用或禁用特定的 Jackson JSON 功能:

  • json.in.disableFeatures
  • json.in.enableFeatures

例如,要禁用 Jackson 的 FAIL_ON_UNKNOWN_PROPERTIES 功能(如果 JSON 输入具有无法映射到 Java 对象的属性,会导致 Jackson 失败):

restConfiguration().component("jetty")
    .host("localhost").port(getPort())
    .bindingMode(RestBindingMode.json)
    .dataFormatProperty("json.in.disableFeatures", "FAIL_ON_UNKNOWN_PROPERTIES");
Copy to Clipboard Toggle word wrap

您可以通过指定逗号分隔列表来禁用 多个功能。例如:

.dataFormatProperty("json.in.disableFeatures", "FAIL_ON_UNKNOWN_PROPERTIES,ADJUST_DATES_TO_CONTEXT_TIME_ZONE");
Copy to Clipboard Toggle word wrap

下面是一个示例演示了如何禁用和启用 Java DSL 中的 Jackson JSON 功能的示例:

restConfiguration().component("jetty")
    .host("localhost").port(getPort())
    .bindingMode(RestBindingMode.json)
    .dataFormatProperty("json.in.disableFeatures", "FAIL_ON_UNKNOWN_PROPERTIES,ADJUST_DATES_TO_CONTEXT_TIME_ZONE")
    .dataFormatProperty("json.in.enableFeatures", "FAIL_ON_NUMBERS_FOR_ENUMS,USE_BIG_DECIMAL_FOR_FLOATS");
Copy to Clipboard Toggle word wrap

下面是一个示例演示了如何禁用和启用 XML DSL 中的 Jackson JSON 功能的示例:

<restConfiguration component="jetty" host="localhost" port="9090" bindingMode="json">
  <dataFormatProperty key="json.in.disableFeatures" value="FAIL_ON_UNKNOWN_PROPERTIES,ADJUST_DATES_TO_CONTEXT_TIME_ZONE"/>
  <dataFormatProperty key="json.in.enableFeatures" value="FAIL_ON_NUMBERS_FOR_ENUMS,USE_BIG_DECIMAL_FOR_FLOATS"/>
</restConfiguration>
Copy to Clipboard Toggle word wrap

可以禁用或启用的 Jackson 功能与以下 Jackson 类中的 enum ID 对应

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2025 Red Hat