インターフェース Validator

すべての既知のサブインターフェース:
SmartValidator
すべての既知の実装クラス:
CustomValidatorBeanLocalValidatorFactoryBeanOptionalValidatorFactoryBeanSpringValidatorAdapter

public interface Validator
アプリケーション固有のオブジェクトのバリデーター。

このインターフェースは、インフラストラクチャやコンテキストとは完全に切り離されています。つまり、Web 層、データアクセス層、その他の層のオブジェクトのみを検証することとは連動していません。そのため、アプリケーションのどのレイヤーでも使用でき、検証ロジックのカプセル化を第一級オブジェクトとして独自にサポートします。

実装は、静的ファクトリメソッド forInstanceOf(Class, BiConsumer) または forType(Class, BiConsumer) を介して作成できます。以下は、UserLogin インスタンスのさまざまな StringSE プロパティが空ではない (null ではなく、完全に空白で構成されていない) こと、および存在するパスワードの長さが少なくとも 'MINIMUM_PASSWORD_LENGTH' 文字であることを検証する、単純だが完全な Validator です。

Validator userLoginValidator = Validator.forInstance(UserLogin.class, (login, errors) -> {
   ValidationUtils.rejectIfEmptyOrWhitespace(errors, "userName", "field.required");
   ValidationUtils.rejectIfEmptyOrWhitespace(errors, "password", "field.required");
   if (login.getPassword() != null
         && login.getPassword().trim().length() < MINIMUM_PASSWORD_LENGTH) {
      errors.rejectValue("password", "field.min.length",
            new Object[]{Integer.valueOf(MINIMUM_PASSWORD_LENGTH)},
            "The password must be at least [" + MINIMUM_PASSWORD_LENGTH + "] characters in length.");
   }
 });

Validator インターフェースとエンタープライズアプリケーションにおけるそのロールの詳細については、Spring リファレンスマニュアルも参照してください。

作成者:
Rod Johnson, Juergen Hoeller, Toshiaki Maki, Arjen Poutsma
関連事項:
  • メソッドのサマリー

    修飾子と型
    メソッド
    説明
    static <T> Validator
    forInstanceOf(ClassSE<T> targetClass, BiConsumerSE<T,Errors> delegate)
    ターゲットオブジェクトが targetClassのインスタンスであるSEかどうかをチェックする Validator を返し、そうであれば、指定された delegate を適用して Errors を設定します。
    static <T> Validator
    forType(ClassSE<T> targetClass, BiConsumerSE<T,Errors> delegate)
    ターゲットオブジェクトのクラスが targetClass と同一かどうかをチェックする Validator を返し、同一であれば、指定された delegate を適用して Errors を設定します。
    boolean
    supports(ClassSE<?> clazz)
    提供された clazz のこの Validator validate インスタンスは可能ですか?
    void
    validate(ObjectSE target, Errors errors)
    指定された target オブジェクトを検証します。このオブジェクトは、supports(Class) メソッドが通常 true を返した (または返すことになる) ClassSE である必要があります。
    default Errors
    指定された target オブジェクトを個別に検証します。
  • メソッドの詳細

    • supports

      boolean supports(ClassSE<?> clazz)
      提供された clazz のこの Validator validate インスタンスは可能ですか?

      このメソッドは通常、次のよう実装されます。

      return Foo.class.isAssignableFrom(clazz);
      Foo は、validated になる実際のオブジェクトインスタンスのクラス(またはスーパークラス)です)
      パラメーター:
      clazz - この Validatorvalidate が可能かどうか尋ねられている ClassSE
      戻り値:
      この Validator が確かに提供された clazzvalidate インスタンスである場合、true 
    • validate

      void validate(ObjectSE target, Errors errors)
      指定された target オブジェクトを検証します。このオブジェクトは、supports(Class) メソッドが通常 true を返した (または返すことになる) ClassSE である必要があります。

      提供された errors インスタンスは、通常、このバリデーターが参加する大規模なバインディングプロセスの一部として、結果として生じる検証エラーを報告するために使用できます。バインディングエラーは、通常、この呼び出しの前に errors インスタンスに事前登録されています。

      パラメーター:
      target - 検証されるオブジェクト
      errors - 検証プロセスに関するコンテキスト状態
      関連事項:
    • validateObject

      default Errors validateObject(ObjectSE target)
      指定された target オブジェクトを個別に検証します。

      共通の validate(Object, Errors) メソッドにデリゲートします。返された errors インスタンスは、特定のターゲットオブジェクトに対して結果として生じる検証エラーを報告するために使用できます。if (validator.validateObject(target).hasErrors())... または validator.validateObject(target).failOnError(IllegalStateException::new));

      メモ: この検証呼び出しには、使用される Errors 実装に制限があり、特にネストされたパスはサポートされません。これでは目的にとって不十分な場合は、BeanPropertyBindingResult などのバインディング可能な Errors 実装を使用して、通常の validate(Object, Errors) メソッドを呼び出します。

      パラメーター:
      target - 検証されるオブジェクト
      戻り値:
      指定されたオブジェクトの検証で発生したエラー
      導入:
      6.1
      関連事項:
    • forInstanceOf

      static <T> Validator forInstanceOf(ClassSE<T> targetClass, BiConsumerSE<T,Errors> delegate)
      ターゲットオブジェクトが targetClassのインスタンスであるSEかどうかをチェックする Validator を返し、そうであれば、指定された delegate を適用して Errors を設定します。

      例:

      Validator passwordEqualsValidator = Validator.forInstanceOf(PasswordResetForm.class, (form, errors) -> {
         if (!Objects.equals(form.getPassword(), form.getConfirmPassword())) {
                 errors.rejectValue("confirmPassword",
                       "PasswordEqualsValidator.passwordResetForm.password",
                       "password and confirm password must be same.");
                 }
               });
      型パラメーター:
      T - ターゲットオブジェクト型
      パラメーター:
      targetClass - 返されたバリデーターによってサポートされるクラス
      delegate - ターゲットオブジェクトで呼び出される関数 (型 T のインスタンスの場合)
      戻り値:
      作成された Validator
      導入:
      6.1
    • forType

      static <T> Validator forType(ClassSE<T> targetClass, BiConsumerSE<T,Errors> delegate)
      ターゲットオブジェクトのクラスが targetClass と同一かどうかをチェックする Validator を返し、同一であれば、指定された delegate を適用して Errors を設定します。

      例:

      Validator passwordEqualsValidator = Validator.forType(PasswordResetForm.class, (form, errors) -> {
         if (!Objects.equals(form.getPassword(), form.getConfirmPassword())) {
                 errors.rejectValue("confirmPassword",
                       "PasswordEqualsValidator.passwordResetForm.password",
                       "password and confirm password must be same.");
                 }
               });
      型パラメーター:
      T - ターゲットオブジェクト型
      パラメーター:
      targetClass - 返されたバリデーターによってサポートされる正確なクラス (サブクラスなし)
      delegate - ターゲットオブジェクトで呼び出される関数 (型 T のインスタンスの場合)
      戻り値:
      作成された Validator
      導入:
      6.1