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() 构建器(Java DSL)或 restConfiguration 元素(XML DSL)配置 REST DSL 的选项。

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

component()

@component

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

scheme()

@scheme

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

host()

@host

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

port()

@port

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

注: 此设置将被 Servlet 组件 忽略,它使用容器的标准 HTTP 端口。对于 Apache Karaf OSGi 容器,标准 HTTP 端口通常为 8181。为采用 JMX 和工具设置端口值的好方法是个好办法。

contextPath()

@contextPath

为 REST 服务设置领先的上下文路径。这可以用于 Servlet 等组件,使用 上下文路径 设置部署部署的 Web 应用。

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, PUT , DELETE ,TRACE,OPTIONS,CONNECT,PATCH

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_UN_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