Bean検証に組み込みの制約
@Null注釈付き要素はnullでなければなりません
@notnull注釈付き要素はnullであってはなりません
@asserttrue注釈付き要素は真でなければなりません
@assertfalse注釈付き要素はfalseでなければなりません
@min(値)注釈付き要素は数でなければならず、その値は指定された最小値以上でなければなりません。
@max(値)注釈付き要素は数でなければならず、その値は指定された最大値以下でなければなりません。
@decimalmin(value)注釈付き要素は数でなければならず、その値は指定された最小値よりも大きくなければなりません
@decimalmax(値)注釈付き要素は数でなければならず、その値は指定された最大値よりも等しくなければなりません
@size(max =、min =)注釈付き要素のサイズは、指定された範囲内でなければなりません。
@digits(整数、分数)注釈付き要素は数でなければならず、その値は許容範囲内でなければなりません。
@past注釈付き要素は過去の日付でなければなりません
@future注釈付き要素は将来の日付でなければなりません
@pattern(regex =、flag =)注釈付き要素は、指定された正規表現に準拠する必要があります
Hibernate Validatorは、制約を添付しています
@notblank(message =)文字列が無効であり、0より大きくなければならないことを確認します
@email注釈付き要素はメールアドレスである必要があります
@length(min =、max =)注釈付き文字列のサイズは、指定された範囲内でなければなりません。
@notemptyコメントされた文字列は空ではないに違いありません
@range(min =、max =、message =)注釈付き要素は適切な範囲内でなければなりません
効果と利点
最初に最終効果を見てみましょう:
public class userentity {@passwordプライベート文字列パスワード。 @emailプライベート文字列メール;}上記では、2つのカスタム注釈を使用して、パスワードと電子メールを確認します。これの利点は、1つの定義がどこでも使用されることです。検証ルールを変更するときは、注釈を変更するだけです。カスタマイズする場合は、hibernateが提供するタグを使用してください。
@pattern(regexp = "...")private string email;
多くのクラスを書いた後、突然検証ルールregexpを変更する必要がある場合、現時点ではワークロードがはるかに大きくなります。
成し遂げる
まず、Hibernateの検証依存関係を紹介し、追加します。
<! - hibernate validator-> <! - hibernate検証フレームワーク - > <依存関係> <groupid> org.hibernate </groupid> <artifactid> hibernate-validator </artifactid> <バージョン> 5.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.
Hibernate検証はJSRの参照実装であるため、Bean検証に使用してください。
検証注釈のカスタマイズは、3つのステップに分かれています。
最初のステップは、注釈を作成することです。
@target({method、field、annotation_type、constructor、parameter})@retention(runtime)@documented@constraint(validatedby = {emailvalidator.class})public @interface email {string message()default "これは有効な電子メール形式ではありません"; /** * @ @return正規式を一致させる */string regexp()default "[a-za-z0-9 ._%+ - ]+ @[a-za-z0-9]+//。[a-za-z] {2,4}"; class <?> [] groups()default {};クラス<?ペイロード> [] payload()default {}; /***同じ要素でいくつかの{@link size}アノテーションを定義します。 * * @see size */ @target({method、field、annotation_type、constructor、parameter})@retention(runtime)@documented @interface list {email [] value(); }} @Interfaceキーワードを介して注釈を作成すると、各メソッドは注釈のパラメーターです。たとえば、上記のコードでは、 @Email(regexp="...",message="...")このように使用できます。残りを無視して、直接コピーするだけです。 @Constraint(validatedBy = { EmailValidator.class })は、アノテーションの検証クラスを指定し、実際の状況に従ってクラス名を置き換えることに注意する必要があります。
2番目のステップは、検証クラスを作成することです。
パブリッククラスのemailvalidator constraintvalidator <email、string> {private string regexp; @Override public void initialize(email constraintannotation){this.regexp = constraintannotation.regexp(); } @Override public boolean isvalid(string value、constraintValidatorContextコンテキスト){if(value == null){return true;} if(value.matches(regexp)){return true; } falseを返します。 }}ここでは、 ConstraintValidator<Email, String>インターフェイスを実装して、VALIBARTARを作成するだけです。初期化メソッドは注釈付きのRegexp値を取得し、iSValidメソッドが検証されます。正規表現を満たしている場合、それは真実に戻り、それ以外の場合はfalseを返します。
値が空の場合、つまり、検証オブジェクトが初期化されていない場合、対応する検証ルールを記述する必要があります。そうしないと、エラーが報告されます。上記のコードでは、書かれているのは次のとおりです。
if(value == null){return true;}つまり、検証オブジェクトが空の場合、成功を返します。
3番目のステップは、デフォルトのエラーメッセージを記述することです。実際、このステップはデフォルトを通じて最初のステップで行われているため、このステップを実行する必要はありません。
要約します
上記は、この記事のコンテンツ全体です。この記事の内容には、すべての人の研究や仕事に特定の参照値があることを願っています。ご質問がある場合は、メッセージを残してコミュニケーションをとることができます。 wulin.comへのご支援ありがとうございます。