パラメータバリリアV1.0(すべてのパラメータをチェックするメソッドをコールし、得られた結果を確認し、エラーを含む理由)

ワン:はじめに

バックエンドを書くことで、私たちはしばしばそれ以上のパラメータは、我々は多くのコードが生じた判決文の多くを、記述する必要性を確認する必要がありますときとき、検証ロジックを記述する必要があるなど、電話番号、パスワード、などのパラメータの数の顔冗長性。だから、僕は、検証のためのオブジェクトに渡すことができるすべてのパラメータのためのオブジェクトパラメータの検証をインスタンス化するために、検証メソッドを呼び出し、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     }

 

 

おすすめ

転載: www.cnblogs.com/HumorChen/p/10945666.html