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");

使用 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>

配置选项

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

表 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 命令来选择覆盖默认设置。

表 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");

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

.dataFormatProperty("json.in.disableFeatures", "FAIL_ON_UNKNOWN_PROPERTIES,ADJUST_DATES_TO_CONTEXT_TIME_ZONE");

以下是如何在 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");

以下是如何在 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>

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

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.