HTTP ヘッダーマッピング

Spring Integration は、HTTP リクエストと HTTP レスポンスの両方の HTTP ヘッダーマッピングのサポートを提供します。

デフォルトでは、すべての標準 HTTP ヘッダー [Wikipedia] (英語) がメッセージから HTTP リクエストまたはレスポンスヘッダーにマップされ、追加の構成は必要ありません。ただし、さらにカスタマイズが必要な場合は、名前空間のサポートを利用して追加の構成を提供できます。ヘッダー名のカンマ区切りのリストを指定でき、ワイルドカードとして機能する "*" 文字を使用した単純なパターンを含めることができます。このような値を指定すると、デフォルトの動作がオーバーライドされます。基本的に、その時点で完全に制御されていることを前提としています。ただし、すべての標準 HTTP ヘッダーを含めたい場合は、ショートカットパターン HTTP_REQUEST_HEADERS および HTTP_RESPONSE_HEADERS を使用できます。次のリストは、2 つの例を示しています (最初の例ではワイルドカードを使用しています)。

<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 を使用します。DefaultHttpHeaderMapper は、適切な方向を適用できるように、受信と送信のアダプターに 2 つの静的ファクトリメソッドを提供します(HTTP リクエストとレスポンスを適切にマッピングします)。

さらにカスタマイズが必要な場合は、DefaultHttpHeaderMapper を個別に構成し、header-mapper 属性を介してアダプターに挿入することもできます。

バージョン 5.0 より前の DefaultHttpHeaderMapper は、ユーザー定義の非標準 HTTP ヘッダーのデフォルトプレフィックスは X- でした。バージョン 5.0 は、デフォルトのプレフィックスを空の文字列に変更しました。RFC-6648 [IETF] (英語) によると、このようなプレフィックスの使用は現在推奨されていません。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 戦略インターフェースを直接実装し、実装への参照を提供できます。