HTTP 头部映射
Spring Integration 为 HTTP 请求和 HTTP 响应提供了 HTTP 头部映射支持。
默认情况下,所有标准 HTTP 头部字段 都会从消息映射到 HTTP 请求或响应头部,无需额外配置。但若确实需要进一步定制,您可以通过利用命名空间支持来提供额外配置。您可以提供以逗号分隔的头部名称列表,并可使用包含简单模式的通配符 *。提供此类值将覆盖默认行为。本质上,这意味着此时您拥有完全控制权。不过,若您仍希望包含所有标准 HTTP 头部,可以使用快捷模式:HTTP_REQUEST_HEADERS 和 HTTP_RESPONSE_HEADERS。以下清单展示了两个示例(第一个示例使用了通配符):
<int-http:outbound-gateway id="httpGateway"
url="http://localhost/test2"
mapped-request-headers="thing1, thing2"
mapped-response-headers="X-*, HTTP_RESPONSE_HEADERS"
channel="someChannel"/>
<int-http:outbound-channel-adapter id="httpAdapter"
url="http://localhost/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="http://localhost/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 策略接口,并提供对自定义实现的引用。