パッケージ jakarta.validation

アノテーションインターフェース Constraint


アノテーションを Jakarta Validation 制約としてマークします。

特定の制約アノテーションは、制約検証実装のリストを参照する @Constraint アノテーションによってアノテーションを付ける必要があります。

各制約アノテーションは、次の属性をホストする必要があります。

  • String message() default [...]; は、デフォルトで、制約の完全修飾クラス名とそれに続く .message で構成されるエラーメッセージキーになります。たとえば "{com.acme.constraints.NotSafe.message}"
  • ユーザーがターゲットグループをカスタマイズするための Class<?>[] groups() default {}; 
  • 拡張性を目的とした Class<? extends Payload>[] payload() default {}; 

ジェネリクスとクロスパラメーターの両方である制約を作成する場合、制約アノテーションは validationAppliesTo() プロパティをホストする必要があります。制約は、アノテーション付き要素を対象とする場合は一般的であり、メソッドまたはコンストラクターのパラメーターの配列を対象とする場合はクロスパラメーターです。

     ConstraintTarget validationAppliesTo() default ConstraintTarget.IMPLICIT;
 
このプロパティを使用すると、制約のユーザーは、制約が実行可能ファイルの戻り値の型をターゲットにするか、パラメーターの配列をターゲットにするかを選択できます。次の場合、制約は一般的であり、クロスパラメーターです。
  • 2 種類の ConstraintValidator が制約にアタッチされています。1 つは ValidationTarget.ANNOTATED_ELEMENT をターゲティングし、もう 1 つは ValidationTarget.PARAMETERS をターゲティングします。
  • または、ConstraintValidator が ANNOTATED_ELEMENT と PARAMETERS の両方をターゲットとする場合。
このような二重の制約はまれです。詳細については、SupportedValidationTarget を参照してください。

制約定義の例を次に示します。

 @Documented
 @Constraint(validatedBy = OrderNumberValidator.class)
 @Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER, TYPE_USE })
 @Retention(RUNTIME)
 public @interface OrderNumber {
     String message() default "{com.acme.constraint.OrderNumber.message}";
     Class<?>[] groups() default {};
     Class<? extends Payload>[] payload() default {};
 }
 
作成者:
Emmanuel Bernard, Gavin King, Hardy Ferentschik
  • 要素の詳細

    • validatedBy

      ClassSE<? extends ConstraintValidator<?,?>>[] validatedBy
      制約を実装する ConstraintValidator クラス。指定されたクラスは、指定された ValidationTarget の異なるターゲット型を参照する必要があります。2 つの ConstraintValidator が同じ型を参照している場合、例外が発生します。

      メソッドまたはコンストラクターのパラメーターの配列(クロスパラメーター)をターゲットとする最大 1 つの ConstraintValidator が受け入れられます。2 つ以上存在する場合、例外が発生します。

      戻り値:
      制約を実装する ConstraintValidator クラスの配列