65.2. Bean Validation を使用したサービスの開発
65.2.1. サービス Bean のアノテーション リンクのコピーリンクがクリップボードにコピーされました!
概要 リンクのコピーリンクがクリップボードにコピーされました!
Bean 検証でサービスを開発する最初のステップは、関連する検証アノテーションをサービスを表す Java クラスまたはインターフェイスに適用することです。検証アノテーションを使用すると、メソッドパラメーター、戻り値、およびクラスフィールドに制約を適用でき、サービスが呼び出されるたびに、実行時にチェックされます。
単純な入力パラメーターの検証 リンクのコピーリンクがクリップボードにコピーされました!
パラメーターが簡単な Java 型である場合にサービスメソッドのパラメーターを検証するには、Bean バリデーション API (javax.validation.constraints
パッケージ) から制約アノテーションを適用できます。たとえば、以下のコード例は、nullness (@NotNull
アノテーション) の両方のパラメーターをテストし、id
文字列が \\d+
正規表現 (@Pattern
アノテーション) と一致するかどうか、および name
文字列の長さが 1 から 50 の範囲にあるかどうかをテストします。
複雑な入力パラメーターの検証 リンクのコピーリンクがクリップボードにコピーされました!
複雑な入力パラメーター (オブジェクトインスタンス) を検証するには、以下の例のように @Valid
アノテーションをパラメーターに適用します。
@Valid
アノテーションは、単独では制約を指定しません。Book パラメーターに @Valid
のアノテーションを付けると、検証制約を探すために (再帰的に) Book
クラスの定義内を調べるように、検証エンジンを効果的に指示します。この例では、以下のように、Book
クラスは id
および name
フィールドの検証制約で定義されます。
戻り値の検証 (応答以外) リンクのコピーリンクがクリップボードにコピーされました!
通常のメソッドの戻り値 (応答以外) に検証を適用するには、メソッド署名の前にアノテーションを追加します。たとえば、nullness (@NotNull
アノテーション) の戻り値をテストし、検証の制約を再帰的にテストするには (@Valid
アノテーション)、以下のように getBook
メソッドにアノテーションを付けます。
戻り値 (応答) の検証 リンクのコピーリンクがクリップボードにコピーされました!
javax.ws.rs.core.Response
オブジェクトを返すメソッドに検証を適用するには、Response 以外のケースと同じアノテーションを使用できます。以下に例を示します。
65.2.2. 標準アノテーション リンクのコピーリンクがクリップボードにコピーされました!
Bean 検証の制約 リンクのコピーリンクがクリップボードにコピーされました!
表65.1「Bean Validation の標準アノテーション」 は、Bean Validation 仕様で定義されている標準のアノテーションで、フィールドやメソッドの戻り値およびパラメーターの制約定義に使用できます (標準アノテーションはクラスレベルで適用できません)。
アノテーション | 適用先 | 説明 |
---|---|---|
|
|
アノテーションが付けられた要素が |
|
|
アノテーションが付けられた要素が |
|
|
|
|
|
|
|
|
アノテーションが付けられた値が、整数部の桁数が |
|
| アノテーション付き日付が未来の日付であるかどうかを確認します。 |
|
| アノテーション付きの値が指定の最大値以下であるかを確認します。 |
|
| アノテーション付きの値が指定の最小値以上であるかを確認します。 |
| 任意のタイプ |
アノテーションが付けられた値が |
| 任意のタイプ |
アノテーションが付けられた値が |
|
| アノテーションが付けられた日付が過去のものであるかどうかを確認します。 |
|
|
指定されたフラグの一致を考慮して、アノテーションが付けられた文字列が正規表現 |
|
|
アノテーションが付けられたコレクション、マップ、または配列のサイズが |
| プリミティブ以外のタイプ | アノテーション付きオブジェクトに対して再帰的に検証を実行します。オブジェクトがコレクションかアレイの場合は、要素は再帰的に検証されます。また、オブジェクトがマップの場合、値要素が再帰的に検証されます。 |
65.2.3. カスタムアノテーション リンクのコピーリンクがクリップボードにコピーされました!
Hibernate でのカスタム制約の定義 リンクのコピーリンクがクリップボードにコピーされました!
Bean Validation API で独自のカスタム制約アノテーションを定義できます。Hibernate バリデーターの実装でこれを行う方法は、Hibernate Validator Reference Guide の Creating custom constraints の章を参照してください。