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 アノテーションをターゲット型に追加します。以下に例を示します。