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 的选项。
Java DSL | XML DSL | 描述 |
---|---|---|
|
|
指定用作 REST 传输的 Camel 组件(如 |
|
|
用于公开 REST 服务的协议。取决于底层 REST 实现,但通常支持 |
|
| 用于公开 REST 服务的主机名。 |
|
| 用于公开 REST 服务的主机名。 注: 这个设置被 Servlet 组件 忽略,该组件改为使用容器的标准 HTTP 端口。如果是 Apache Karaf OSGi 容器,标准 HTTP 端口通常为 8181。对于 JMX 和工具,最好设置 port 值。 |
|
|
为 REST 服务设置前导上下文路径。这可与 Servlet 等组件一起使用,其中部署的 Web 应用使用 |
|
|
如果没有明确设置主机名,这个解析器会决定 REST 服务的主机。可能的值有
默认为 |
|
|
为 JSON 或 XML 格式消息启用绑定模式。可能的值有: |
|
|
指定在输出上有自定义 HTTP 错误代码标头是否跳过绑定。这样,您可以构建不绑定到 JSON 或 XML 的自定义错误消息,因为其他消息会成功。默认为 |
|
|
如果为 |
|
|
指定 Camel 用来实现 JSON 数据格式的组件。可能的值有: |
|
|
指定 Camel 用来实现 XML 数据格式的组件。可能的值有: |
|
| 允许您在底层 REST 实现上设置任意 组件级别 属性。 |
|
| 允许您在底层 REST 实现上设置任意 端点级别 属性。 |
|
| 允许您在底层 REST 实现上设置任意 消费者端点 属性。 |
|
| 允许您在底层数据格式组件(如 Jackson 或 JAXB)上设置任意属性。在 Camel 2.14.1 以后,您可以将以下前缀附加到属性键:
将属性设置限制为特定的格式类型(JSON 或 XML),以及特定的消息方向(IN 或 OUT)。 |
|
| 允许您将自定义 CORS 标头指定为键/值对。 |
默认 CORS 标头
如果启用了 CORS (跨原始资源共享),则默认设置以下标头。您可以通过调用 corsHeaderProperty
DSL 命令来覆盖默认设置。
标头键 | 标头值 |
---|---|
|
|
|
|
|
|
|
|
启用或禁用 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");
您可以通过指定一个逗号分隔的列表来禁用 多个功能。例如:
.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 类中的 枚举
ID