HTTP 受信コンポーネント
HTTP 経由でメッセージを受信するには、HTTP 受信チャネルアダプターまたは HTTP 受信ゲートウェイを使用する必要があります。HTTP 受信アダプターをサポートするには、Apache Tomcat (英語) や Jetty (英語) などのサーブレットコンテナー内にデプロイする必要があります。これを行う最も簡単な方法は、web.xml
ファイルで次のサーブレット定義を提供することにより、Spring の HttpRequestHandlerServlet
(Javadoc) を使用することです。
<servlet>
<servlet-name>inboundGateway</servlet-name>
<servlet-class>o.s.web.context.support.HttpRequestHandlerServlet</servlet-class>
</servlet>
サーブレット名が Bean 名と一致していることに注意してください。詳細については、HttpRequestHandlerServlet
Javadoc を参照してください。
Spring MVC アプリケーション内で実行している場合、前述の明示的なサーブレット定義は必要ありません。その場合、Spring MVC コントローラー Bean の場合と同様に、ゲートウェイの Bean 名を URL パスと照合できます。詳細については、Spring Framework リファレンスドキュメントの一部である Web MVC フレームワークを参照してください。
サンプルアプリケーションと対応する構成については、Spring Integration サンプル [GitHub] (英語) リポジトリを参照してください。Spring Integration の HTTP サポートを示す HTTP サンプル [GitHub] (英語) アプリケーションが含まれています。 |
次の例 Bean は、HTTP 受信エンドポイントを定義します。
<bean id="httpInbound"
class="org.springframework.integration.http.inbound.HttpRequestHandlingMessagingGateway">
<property name="requestChannel" ref="httpRequestChannel" />
<property name="replyChannel" ref="httpReplyChannel" />
</bean>
HttpRequestHandlingMessagingGateway
は HttpMessageConverter
インスタンスのリストを受け入れるか、デフォルトリストに依存します。コンバーターを使用すると、HttpServletRequest
から Message
へのマッピングをカスタマイズできます。デフォルトのコンバーターは、コンテンツ型が text
で始まる POST
リクエストに対して String
メッセージを作成する単純な戦略をカプセル化します。詳細については、Javadoc を参照してください。追加のフラグ(mergeWithDefaultConverters
)をカスタム HttpMessageConverter
のリストとともに設定して、カスタムコンバーターの後にデフォルトコンバーターを追加できます。デフォルトでは、このフラグは false
に設定されています。これは、カスタムコンバーターがデフォルトリストを置き換えることを意味します。
メッセージ変換プロセスは、(オプションの) requestPayloadType
プロパティと受信 Content-Type
ヘッダーを使用します。バージョン 4.3 以降、リクエストにコンテンツ型ヘッダーがない場合、RFC 2616
で推奨されているように、application/octet-stream
が想定されます。以前は、このようなメッセージの本文は無視されていました。
Spring Integration 2.0 はマルチパートファイルのサポートを実装しました。リクエストが MultipartHttpServletRequest
としてラップされている場合、デフォルトのコンバーターを使用すると、そのリクエストは、個々のパートのコンテンツ型に応じて、バイト配列、文字列、Spring の MultipartFile
のインスタンスである値を含む MultiValueMap
である Message
ペイロードに変換されます。
HTTP 受信エンドポイントは、Bean の名前が multipartResolver (Spring の DispatcherServlet が期待する名前)の場合、コンテキスト内で MultipartResolver を見つけます。その Bean が見つかると、受信リクエストマッパーでマルチパートファイルのサポートが有効になります。そうでない場合、マルチパートファイルリクエストを Spring Integration Message にマップしようとすると失敗します。MultipartResolver に対する Spring のサポートの詳細については、Spring リファレンスマニュアルを参照してください。 |
|
クライアントにレスポンスを送信する場合、ゲートウェイの動作をカスタマイズする方法がいくつかあります。デフォルトでは、ゲートウェイは、200
ステータスコードを送り返すことで、リクエストが受信されたことを確認します。Spring MVC ViewResolver
によって解決される 'viewName' を提供することで、このレスポンスをカスタマイズできます。ゲートウェイが Message
へのレスポンスを期待する場合は、expectReply
フラグ (コンストラクター引数) を設定して、ゲートウェイが HTTP レスポンスを作成する前にレスポンス Message
を待機するようにすることができます。次の例では、ビュー名を持つ Spring MVC コントローラーとして機能するようにゲートウェイを構成します。
<bean id="httpInbound"
class="org.springframework.integration.http.inbound.HttpRequestHandlingController">
<constructor-arg value="true" /> <!-- indicates that a reply is expected -->
<property name="requestChannel" ref="httpRequestChannel" />
<property name="replyChannel" ref="httpReplyChannel" />
<property name="viewName" value="jsonView" />
<property name="supportedMethodNames" >
<list>
<value>GET</value>
<value>DELETE</value>
</list>
</property>
</bean>
true
の constructor-arg
値のため、応答を待機します。上記の例は、ゲートウェイで受け入れられる HTTP メソッド(デフォルトでは POST
および GET
)をカスタマイズする方法も示しています。
応答メッセージはモデルマップで使用できます。デフォルトでは、そのマップエントリのキーは 'reply' ですが、エンドポイントの構成で 'replyKey' プロパティを設定することで、このデフォルトを上書きできます。
ペイロード検証
バージョン 5.2 以降では、チャネルに送信する前にペイロードをチェックするために、HTTP 受信 エンドポイントに Validator
を提供できます。このペイロードは、貴重なデータに関する検証範囲を狭めるための payloadExpression
後の変換と抽出の結果としてすでに生成されています。検証失敗の処理は、Spring MVC エラー処理のものと完全に同じです。