SpringBootはJSR303カスタム検証アノテーションを使用します

しかし、それが提供する注釈が要件を満たさない場合があります。たとえば、フィールドの色は「赤、青、黄色」の3つの値のいずれかである必要があります。現時点では、独自の判断ロジックを記述する必要があります。他の場所で判断する方法をカスタマイズできますが、JSR303を使用しているため、コードを統一するために検証アノテーションをカスタマイズできます。

1、フィールドにcolorカスタムラベルのメモに@ListValue、これらの値の書き込みに

@ListValue(vals = {"red"、 "blue"、 "yellow"})
プライベート文字列の色。

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カスタムエラーメッセージ

com.sjl.common.valid.ListValue.message =指定された値を送信する必要があります

これまでのところ、すべての作業が完了した、カスタムアノテーションは@ListValue、もちろん、これはちょうど非常に簡単なチェックが、ほぼ同じ方法で、作業することができます。

おすすめ

転載: www.linuxidc.com/Linux/2020-04/162853.htm
おすすめ