正常に行うことはできません。
ここでは、Hibernate Validatorを使用してより動的なバリデーションを行う方法を説明します。
ClassValidator
クラスを拡張します。
getInvalidVaues(Object myObj)
メソッドをオーバーライドします。まず、super.getInvalidValues(myObj)
に電話をかけ、カスタマイズした検証にフックを追加します。
- カスタムバリデータをインスタンス化し、
getInvalidValues
を呼び出して検証します。この時点で、任意の休止状態の注釈付き検証が開始され、カスタム動的検証(注釈でサポートされていないもの)も同様に開始されます。
例:よう
public class MyObjectValidator extends ClassValidator<MyObject>
{
public MyObjectValidator()
{
super(MyObject.class);
}
public InvalidValue[] getInvalidValues(MyObject myObj)
{
List<InvalidValue> invalids = new ArrayList<InvalidValue>();
invalids.addAll(Arrays.asList(super.getInvalidValues(myObj)));
// add custom validations here
invalids.addAll(validateDynamicStuff(myObj));
InvalidValue[] results = new InvalidValue[invalids.size()];
return invalids.toArray(results);
}
private List<InvalidValue> validateDynamicStuff(MyObject myObj)
{
// ... whatever validations you want ...
}
}
だからあなたのカスタム検証コードは、ロジックを含めることができます「ユーザーがそれを設定した場合、この検証を行い、それ以外の場合はそのいずれかを実行します」などあなたはしてもしなくてもよいことができるかもしれませんhibernateバリデーションを実行するのと同じコードを活用することができますが、いずれにせよ、あなたがやっていることは、hibernateバリデーターの「通常の」ユースケースに関係しています。
アノテーションを無効にする_wont_work。 hibernateバリデータをカスタマイズする1つの方法は、独自の注釈を記述することですが、DRが実行しようとしているもの、b/cでは実行時に動的値にアクセスできませんに添付。注釈を構成するための注釈への入力はすべて定数でなければなりません。動作するものについては、以下の私の答えをチェックしてください。 –