Spring パラメータバインディングの仕組み
Springパラメータバインディングの仕組みでは、反射メカニズムを使用してHTTPリクエスト内のパラメータ値がメソッドのパラメータにバインドされます。
Spring MVCでは、リクエストのハンドリングをHandlerAdapterが行っています。HandlerAdapterはリクエストのURLから対応するコントローラのメソッドを検索し、そのメソッドのパラメータのリストを取得して、リクエストのパラメータ名とメソッドのパラメータ名を照合し、リクエストのパラメータ値をメソッドのパラメータにバインドします。
Springではさまざまなパラメータバインディングの方法が提供されており、次のようなものがあります
- リクエストパラメータバインディング: リクエスト内のパラメータの値をパラメータ名に従ってメソッドのパラメータにバインドします。
- パスパラメータのバインディング: URL中のパスパラメータの値をメソッドのパラメータにバインドします。
- リクエストヘッダバインディング:メソッドのパラメータにリクエストヘッダの値をバインドする。
- Cookieバインディング:リクエストのCookie値をメソッドのパラメーターへバインドします。
- リクエストボディバインディング: JSON/XML などのリクエスト内のデータをメソッドのパラメータにバインドします。
Spring はパラメータタイプの変換をタイプに応じて行い、文字列のパラメータの値を target のタイプへ変換します。その場合、パラメータのタイプが一致しない、または変換プロセスが失敗した場合、Spring は例外を発生させます。
Springでは、独自のパラメーターバインディングロジックを実装できる独自のパラメーターバインディングを使用できます。HandlerMethodArgumentResolverインターフェイスを実装することで、パラメーターバインディングのルールとロジックを独自に定義できます。カスタムパラメータバインディングはSpringコンテナに登録する必要があり、設定ファイルで使用するパラメータバインディングを構成する必要があります。