しかし、それが提供する注釈が要件を満たさない場合があります。たとえば、フィールドの色は「赤、青、黄色」の3つの値のいずれかである必要があります。現時点では、独自の判断ロジックを記述する必要があります。他の場所で判断する方法をカスタマイズできますが、JSR303を使用しているため、コードを統一するために検証アノテーションをカスタマイズできます。
1、フィールドにcolor
カスタムラベルのメモに@ListValue
、これらの値の書き込みに
プライベート文字列の色。
2.メモを作成します。@ListValue
たとえば@NotNull
、公式のメモを参照できます。以下のメモのいくつかの場所を変更するだけで済みます
//カスタム制約バリデーター
@Constraint(validatedBy = {ListValueConstraintValidator.class})
@Documented
@Target({METHOD、FIELD、ANNOTATION_TYPE、CONSTRUCTOR、PARAMETER、TYPE_USE})
@Retention(RUNTIME)
public @interface ListValue {
//設定ファイル内のエラーメッセージの名前
String message()default "{com.sjl.common.valid.ListValue.message}";
Class <?> [] groups()default {};
クラス<?Extends Payload> [] payload()default {};
//カスタム値のタイプ
String [] vals()default {};
}
3.カスタム制約チェッカー、継承を作成します。ConstraintValidator
最初のジェネリック型はカスタムアノテーション、2番目はチェック値のタイプ、つまりアノテーションでマークされたフィールドのタイプです
パブリッククラスListValueConstraintValidatorは、ConstraintValidator <ListValue、String> {
private static Set <String> set = new HashSet <>();を実装します。
@Override
public void initialize(ListValue constraintAnnotation){
for(String val:constraintAnnotation.vals()){
set.add(val);
}
}
/ **
*検証に合格するかどうかを判断
*
* @param value
* @param context
* @return
* /
@Override
public boolean isValid(String value、ConstraintValidatorContext context){
return set.contains(value);
}
}
4、resources
ディレクトリの作成ValidationMessages.properties
プロファイルは、key
第2段階でmessage
はデフォルト設定、value
カスタムエラーメッセージ
これまでのところ、すべての作業が完了した、カスタムアノテーションは@ListValue
、もちろん、これはちょうど非常に簡単なチェックが、ほぼ同じ方法で、作業することができます。