HTTP 標頭映射

Spring Integration 為 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 策略介面,並提供對您實作的參考。