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 ()
builder (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 和工具而言,最好设置端口值 none。 |
|
|
为 REST 服务设置前导上下文路径。这可用于使用 |
|
|
如果没有显式设置主机名,此解析器决定 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 类中的 enum
ID 对应