HTTP 标头映射

Spring Integration 支持对 HTTP 请求和响应进行 HTTP 头映射。

默认情况下,所有标准的 HTTP 头 会从消息映射到 HTTP 请求或响应头,无需额外配置。但是,如果您需要进一步定制,可以通过利用命名空间支持来提供额外的配置。您可以提供一个以逗号分隔的头部名称列表,并且可以使用 `*` 字符作为通配符来包含简单的模式。提供此类值会覆盖默认行为。基本上,它假设您在此时完全控制。但是,如果您确实想包含所有标准的 HTTP 头,可以使用快捷模式:`HTTP_REQUEST_HEADERS` 和 `HTTP_RESPONSE_HEADERS`。以下列表显示了两个示例(第一个示例使用通配符)

<int-http:outbound-gateway id="httpGateway"
    url="https://127.0.0.1/test2"
    mapped-request-headers="thing1, thing2"
    mapped-response-headers="X-*, HTTP_RESPONSE_HEADERS"
    channel="someChannel"/>

<int-http:outbound-channel-adapter id="httpAdapter"
    url="https://127.0.0.1/test2"
    mapped-request-headers="thing1, thing2, HTTP_REQUEST_HEADERS"
    channel="someChannel"/>

适配器和网关使用 `DefaultHttpHeaderMapper`,它现在为入站和出站适配器提供了两种静态工厂方法,以便可以应用适当的方向(根据需要映射 HTTP 请求和响应,进出)。

如果您需要进一步定制,也可以独立配置 `DefaultHttpHeaderMapper` 并将其通过 `header-mapper` 属性注入到适配器中。

在 5.0 版本之前,`DefaultHttpHeaderMapper` 为用户定义的非标准 HTTP 头的默认前缀是 `X-`。5.0 版本将默认前缀更改为空字符串。根据 RFC-6648,现在不鼓励使用此类前缀。您仍然可以通过设置 `DefaultHttpHeaderMapper.setUserDefinedHeaderPrefix()` 属性来定制此选项。以下示例配置了 HTTP 网关的头部映射器

<int-http:outbound-gateway id="httpGateway"
    url="https://127.0.0.1/test2"
    header-mapper="headerMapper"
    channel="someChannel"/>

<bean id="headerMapper" class="o.s.i.http.support.DefaultHttpHeaderMapper">
    <property name="inboundHeaderNames" value="thing1*, *thing2, thing3"/>
    <property name="outboundHeaderNames" value="a*b, d"/>
</bean>

如果您需要执行 `DefaultHttpHeaderMapper` 支持以外的操作,可以直接实现 `HeaderMapper` 策略接口并提供对您实现的引用。