最初は、カスタム@Validatedノートです。
@Target({メソッド、フィールド、ANNOTATION_TYPEコンストラクタ、PARAMETER}) @Retention(RUNTIME) @Documented @Constraint(validatedBy = { IsMobileValidator。クラス}) パブリック @ インタフェースIsMobile { // デフォルトのパラメータは、この持っている必要が ブール(必須)デフォルト はtrue ; // チェックがどのような情報を示唆し、渡されない場合は 文字列メッセージ()デフォルトの「電話番号フォーマットエラー」; クラス []グループ()<?> デフォルト{}; クラス <?延びペイロード> []ペイロード()デフォルト{}; }
IsMobileValidatorこの注釈は、クラスに特異的です:
SLF4J @ パブリック クラス IsMobileValidator 実装 ConstraintValidator < IsMobile、文字列> { プライベート ブールは必要= 偽を; @Override 公共 ボイドイニシャライズ(IsMobile constraintAnnotation){ // 初始化方法、拿到注解 必要= constraintAnnotation.required()。 log.info( + ":: ======== >>>>方法初期化する" 必要)。 } @Override パブリック ブールのisValid(String値、ConstraintValidatorContextコンテキスト){ log.info("isValidメソッド======== >>>> ::" + 値); IF(必須){ // この値が必要な場合 、戻りValidatorUtil.isMobile(値); } 他 { // この場合値は、値がない最初の判断は必要ありません IF (StringUtils.isEmpty(値)){ リターン trueに; } 他{ リターン ValidatorUtil.isMobile(値); // フォーマットは、彼の携帯電話の形式ではないかを判断する価値があります } } } }
utilの具体的な方法が実現されます。
パブリック クラスValidatorUtil { プライベート 静的 最終的な文字列の正規表現=「^((13 [0-9])|(14 [5 | 7])|(15([0-3] | [5-9]))|(17 [013678])|(18 [0,5-9]))\\ D {8} $」。 プライベート 静的な 最終パターンmobile_pattern = Pattern.compile(正規表現)。 パブリック 静的 ブールisMobile(列src){ 場合(StringUtils.isEmpty(SRC)){ 戻り 偽。 } マッチャM = mobile_pattern.matcher(SRC)。 リターンm.matches(); } }