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 和工具设置端口值的好方法是个好办法。 |
|
|
为 REST 服务设置领先的上下文路径。这可以用于 Servlet 等组件,使用 |
|
|
如果没有显式设置主机名,则此解析器决定 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_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 对应