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 会在 classpath 或 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 等组件一起使用,如 Servlet,其中部署的 Web 应用程序使用 context-path 设置进行部署。

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 中,默认值为 allLocalIp

bindingMode()

@bindingMode

为 JSON 或 XML 格式消息启用绑定模式。可能的值有: off,auto,json,xml, 或 json_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

GET,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_UNKNOWN_PROPERTIES 功能(这会导致 Jackson 具有无法映射到 Java 对象的属性):

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