HTTP 頭對映

Spring Integration 為 HTTP 請求和 HTTP 響應提供 HTTP 頭對映支援。

預設情況下,所有標準的 HTTP 頭都會從訊息對映到 HTTP 請求或響應頭,無需額外配置。但是,如果您需要進一步定製,可以利用名稱空間支援提供額外的配置。您可以提供一個逗號分隔的頭名稱列表,並且可以使用 '*' 字元作為萬用字元來包含簡單的模式。提供此類值會覆蓋預設行為。基本上,這意味著您在此時完全控制了對映。但是,如果您想包含所有標準的 HTTP 頭,可以使用快捷模式:HTTP_REQUEST_HEADERSHTTP_RESPONSE_HEADERS。下面的列表顯示了兩個示例(第一個使用了萬用字元)

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

<int-http:outbound-channel-adapter id="httpAdapter"
    url="https:///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:///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 策略介面並提供對您實現的引用。