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 等组件一起使用,如 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
功能(这会导致 Jackson 具有无法映射到 Java 对象的属性):
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 对应