47.3. パラメーターコンバーター
概要 リンクのコピーリンクがクリップボードにコピーされました!
パラメーターコンバーターを使用すると、パラメーター (String
型の) をフィールド、Bean プロパティー、またはリソースメソッド引数の 任意 の型に注入することができます。適切なパラメーターコンバーターを実装してバインディングすることで、JAX-RS ランタイムを拡張して、パラメーター文字列の値をターゲットタイプに変換できます。
自動変換 リンクのコピーリンクがクリップボードにコピーされました!
パラメーターは String
のインスタンスとして受信されるため、String
型のフィールド、Bean プロパティー、およびメソッドパラメーターに常に注入することができます。さらに、JAX-RS ランタイムには、パラメーター文字列を以下の型に自動的に変換する機能があります。
- プリミティブ型。
-
単一の
String
引数を受け入れるコンストラクターを持つ型。 -
型のインスタンスを返す String 引数が 1 つあり、
valueOf
またはfromString
という名前の静的メソッドを持つ型。 -
T
が 2 または 3 で説明する型のいずれかの場合、List<T>
、Set<T>
、またはSortedSet<T>
。
パラメーターコンバーター リンクのコピーリンクがクリップボードにコピーされました!
自動変換が対応していない型にパラメーターを注入するには、型のカスタム パラメーターコンバーター を定義できます。パラメーターコンバーターは、String
からカスタムタイプへの変換、およびカスタムタイプから String
への逆方向の変換を定義できる JAX-RS エクステンションです。
ファクトリーパターン リンクのコピーリンクがクリップボードにコピーされました!
JAX-RS パラメーターコンバーターメカニズムは、ファクトリーパターンを使用します。したがって、パラメーターコンバーターを直接登録するのではなく、パラメーターコンバータープロバイダー (型 javax.ws.rs.ext.ParamConverterProvider
) を登録する必要があり、オンデマンドでパラメーターコンバーター (型 javax.ws.rs.ext.ParamConverter
) が作成されます。
ParamConverter インターフェイス リンクのコピーリンクがクリップボードにコピーされました!
javax.ws.rs.ext.ParamConverter
インターフェイスは以下のように定義されます。
独自の ParamConverter
クラスを実装するには、このインターフェイスを実装し、fromString
メソッド (パラメーター文字列をターゲット型に変換) および toString
メソッド (ターゲット型を文字列に変換) をオーバーライドする必要があります。
ParamConverterProvider interface リンクのコピーリンクがクリップボードにコピーされました!
javax.ws.rs.ext.ParamConverterProvider
インターフェイスは以下のように定義されます。
独自の ParamConverterProvider
クラスを実装するには、このインターフェイスを実装し、ParamConverter
インスタンスを作成するファクトリーメソッドである getConverter
メソッドをオーバーライドする必要があります。
パラメーターコンバータープロバイダーのバインディング リンクのコピーリンクがクリップボードにコピーされました!
パラメーターコンバータープロバイダーを JAX-RS ランタイムに バインド (アプリケーションで利用可能) するには、以下のように実装クラスに @Provider
アノテーションを付ける必要があります。
このアノテーションを使用することで、パラメーターコンバータープロバイダーがデプロイメントのスキャンフェーズで自動的に登録されるようになります。
例 リンクのコピーリンクがクリップボードにコピーされました!
以下の例は、パラメーター文字列を TargetType
型に変換する機能を持つ ParamConverterProvider
および ParamConverter
を実装する方法を示しています。
パラメーターコンバーターの使用 リンクのコピーリンクがクリップボードにコピーされました!
TargetType
のパラメーターコンバーターを定義したので、パラメーターを TargetType
フィールドおよび引数に直接インジェクトできるようになりました。次に例を示します。
デフォルト値の遅延変換 リンクのコピーリンクがクリップボードにコピーされました!
パラメーターのデフォルト値を指定する場合 ( @DefaultValue
アノテーションを使用して)、デフォルト値がターゲットの型にすぐ変換される (デフォルトの動作) か、必要な場合にのみ変換されるべきか (遅延変換) を選択することができます。遅延変換を選択するには、@ParamConverter.Lazy
アノテーションをターゲット型に追加します。以下に例を示します。