ワン:はじめに
バックエンドを書くことで、私たちはしばしばそれ以上のパラメータは、我々は多くのコードが生じた判決文の多くを、記述する必要性を確認する必要がありますときとき、検証ロジックを記述する必要があるなど、電話番号、パスワード、などのパラメータの数の顔冗長性。だから、僕は、検証のためのオブジェクトに渡すことができるすべてのパラメータのためのオブジェクトパラメータの検証をインスタンス化するために、検証メソッドを呼び出し、validatorパラメータを開発しました。Wordには、すべてのパラメータの検証を完了します。
プロジェクトユースケース:
事業の登録を完了します。
1つの @RestController 2 @RequestMapping( "/ cmpas /ユーザ" ) 3 パブリック クラスUserControllerで{ 4 @Autowired 5 プライベートIUserService iUserService。 6 @Autowired 7 プライベートResultData resultData。 8 @Autowired 9 プライベートParameterValidator parameterValidator。 10 @RequestMapping(値= "/登録"のparams = { "のPhoneNumber"、 "パスワード"、 "ニックネーム"、 "本名"、 "性別" }) 11 公衆ResultDataレジスタ(HttpSessionのHttpSessionの、 13は resultData.setResult(parameterValidator.validate(ユーザ)); 14 IF (ResultData.getResult()に等しい(ParameterValidator.SUCESS))は 15 { 16 // 成功した検証 17。 IF (iUserService.insert(ユーザ)) 18である resultData。 setResult( "正常に登録" ); 19 他 20 resultData.setResult( "登録に失敗しました" ); 21 } 22 // エラーの原因が返さ 23 リターンresultDataを; 24 } 25 }
II:開発シナリオのシミュレーション(登録ユーザー)
1:ユーザエンティティ
パブリッククラスユーザー{ プライベート文字列のユーザ名。 プライベート文字列のパスワード。 //方法、取得設定
}
2:独自のパラメータバリデータの開発(独自の検証方法を書いて、抽象クラスAbstractParameterValidatorを継承)
ParameterValidator公共AbstractParameterValidator {クラスを拡張し
、ユーザー名メソッドチェック// ユーザー名(文字列STR)公共の文字列を { 列=戻る「ユーザ名が有効ではありません」; //エラー 文字列の正規表現=「[0-9A-ZA -Z] { 1,12} "; //正規表現 戻りstr.matches(正規表現)SUCCESS :?バック; // リターン } //チェックするパスワード方式 パブリック文字列のパスワード(String str)文字 { 文字列戻る="パスワード無効」 ; 文字列REGEX = "[0-9A-ZA-Z] {8,20}"; (REGEX)SUCCESS :?戻るstr.matchesを返します; } }
2:新しいユーザエンティティを作成します。
=ユーザー新規新しいユーザーのユーザー(); //ユーザがインスタンス割り当てる ; user.setUsername( "HumorChen") user.setPassword( "123456")。
バリの典型的なコール・パラメータ:
//バリデータオブジェクトのインスタンス化パラメータ
ParameterValidator parameterValidator新しい新ParameterValidator =();
// checkメソッドの呼び出し
文字列の結果= parameterValidator.validate(ユーザー)。
呼び出されたときにのみ使用する必要があります
parameterValidator.validate(ユーザー);
戻り値AbstractParameterValidator.SUCCESSのチェックすることによって、すべて
の理由は、そうでない場合は渡しません
3:構造
である必要があれば、同じ名前のメソッドでそこに行くために準備当社独自のバリデータクラスのパラメータに渡されたオブジェクトのすべてのフィールドのコア法の検証(オブジェクト...オブジェクト)、つまりは、検証を探している必要がないので、チェックし、最終的な結果が返されます
1 public String validate(Object... objects) { 2 StringBuilder stringBuilder = new StringBuilder(); 3 for (Object object : objects) 4 for (Field field : object.getClass().getDeclaredFields()) { 5 field.setAccessible(true); 6 Method method = null; 7 try { 8 method = this.getClass().getDeclaredMethod(field.getName(), String.class); 9 } catch (Exception e) { } 10 if (method != null) { 11 String result =null; 12 try{ 13 result=(String) method.invoke(this, field.get(object)); 14 //输出日志 15 log(field.getName(),field.get(object),result); 16 }catch (Exception e){} 17 if (!result.equals(SUCESS)) { 18 if (stringBuilder.length() > 0 && (!outputAllError)) 19 return stringBuilder.toString(); 20 stringBuilder.append(result); 21 stringBuilder.append("\n"); 22 } 23 } 24 } 25 return stringBuilder.length() == 0 ? SUCESS : stringBuilder.toString(); 26 }