HTTP 头映射
Spring 集成同时支持 HTTP 请求和 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
策略接口并提供对您实现的引用。