序文
Spring FrameworkのValidatorコンポーネントは補助コンポーネントであり、データの整合性と有効性に非常に役立ちます。特定のバリデーターを定義することにより、必要な他の場所で使用でき、非常に一般的です。
ビジネスロジックを実行する前に、受信した入力データが検証を通じて合法で正しいことを確認する必要があります。ただし、多くの場合、同じ検証が何度も発生し、コード冗長性、時間の無駄になり、乾燥した原理に違反します。
これらの問題を解決するために、検証コードをカプセル化することを検討できます。
JSR-303
JSR-303は、Beanデータの合法性検証のためにJavaが提供する標準的なフレームワークです。メンバー変数と属性メソッドで注釈を付けることができる一連の検証注釈を定義します。
Hibernateの検証は、この一連の標準実装を提供します。 Spring Boot Web StarterまたはSpring Boot Starterの検証を導入すると、デフォルトでHibernateの検証が導入されます。
使用例
多くのナンセンスを言った後、コードを追加します。
1.スプリングブートプロジェクトを紹介します
<Dependency> groupid> org.springframework.boot </groupid> <artifactid> spring-boot-starter-web </artifactid> </dependency> <dependency> groupid> hibernate.validator </groupid> <artifactid> hibernate-validator </artifidid> </depency <Dependency> GroupId> org.ProjectLombok </groupId> <Artifactid> lombok </artifactid> </dependency>
2。検証オブジェクトを書き込みます
@datapublic class user {//名前は空になり、名前の長さは2〜30ビットの間であり、名前の長さが渡されない場合、エラーメッセージは@notnull @size(min = 2、max = 30、メッセージ= "問題があるかどうかを確認してください」)。 //名前は空にすることを許可されておらず、最低年齢は18 @notnull @min(18)private Integer Age;}です。3.コントローラーを作成します
@springbootapplication@restcontrollerpublic class userapplication {public static void main(string [] args){springApplication.run(userapplication.class、args); } //1。@validアノテーションを追加するパラメーターの前にチェックする// 2。すぐにそれに従って、bindingResultに従って、@RequestMapping( "/test1")パブリックオブジェクトTest1(@validユーザー、bindingResult bindingResult)を確認してください。{//実際、必要に応じて、BindingResultメソッドに従ってカスタム情報を返すことができます。 //通常のソリューションは次のとおりです。JSR-303 +グローバル例外ハンドラーif(bindingResult.haserrors()){return bindingResult.getAllers(); } "ok"を返します。 }} 4.アプリケーションを実行します
操作の結果を簡単に示した後、検証フレームワークが有効になっていることがわかります。
年齢を確認してください
名前を確認します
検証が合格しました
一般的な検証注釈
@Null注釈付き要素はnullでなければなりません
@notnull注釈付き要素はnullであってはなりません
@asserttrue注釈付き要素は真でなければなりません
@assertfalse注釈付き要素はfalseでなければなりません
@min(値)注釈付き要素は数でなければならず、その値は指定された最小値以上でなければなりません。
@max(値)注釈付き要素は数でなければならず、その値は指定された最大値以下でなければなりません。
@decimalmin(value)注釈付き要素は数でなければならず、その値は指定された最小値よりも大きくなければなりません
@decimalmax(値)注釈付き要素は数でなければならず、その値は指定された最大値よりも等しくなければなりません
@size(max =、min =)注釈付き要素のサイズは、指定された範囲内でなければなりません。
@digits(整数、分数)注釈付き要素は数でなければならず、その値は許容範囲内でなければなりません。
@past注釈付き要素は過去の日付でなければなりません
@future注釈付き要素は将来の日付でなければなりません
@pattern(regex =、flag =)注釈付き要素は、指定された正規表現に準拠する必要があります
Hibernate Balidatorが提供する注釈を確認してください。
@notblank(message =)文字列が無効であり、0より大きくなければならないことを確認します
@email注釈付き要素はメールアドレスである必要があります
@length(min =、max =)注釈付き文字列のサイズは、指定された範囲内でなければなりません。
@notemptyコメントされた文字列は空ではないに違いありません
@range(min =、max =、message =)注釈付き要素は適切な範囲内でなければなりません
カスタム検証アノテーション
時々、私たちが望む検証タイプがサードパーティライブラリにないことがあります。幸いなことに、このシステムは優れた拡張機能を提供し、検証をカスタマイズできます。
たとえば、ユーザーの携帯電話形式を確認し、携帯電話番号検証デバイスを書き込みます。
1。検証の注釈を書きます
// @minなどのシステムに注釈を直接コピーし、新しいアノテーションにコピーしてから、必要に応じて変更できます。 @target({method、field、annotation_type、constructor、parameter})@retention(runtime)@documentded // annotatedの実装クラス。 @constraint(validatedby = {ismobilevalidator.class})public @interface ismobile {//エラーの検証のためのデフォルト情報文字列メッセージ()デフォルト「携帯電話番号形式に問題があります」; //検証を強制するかどうかboolean isRequired()default false; class <?> [] groups()default {};クラス<?ペイロードを拡張> []ペイロード()デフォルト{};} 2。特定の実装クラスを作成します
注釈は単なるマークであり、特定のクラスで実際のロジックを実装する必要があることがわかっています。前のステップの注釈は、検証関数を実装するクラスがisMobileValidatorであることを指定します。
// Custom AnnotationsはConstraintValidatorインターフェイスを実装する必要があります。2つのパラメーター//最初のパラメーターは、検証する特定のアノテーションです// 2番目は検証のパラメータータイプISMobileValidator constraintvalidator <ismobile、string> {private boolean evens = false; private static final pattern mobile_pattern = pattern.compile( "1 // d {10}"); //ツール方法、携帯電話番号であるかどうかを判断しますpublic static boolean ismobile(string src){if(stringutils.isempty(src)){return false; } matcher m = mobile_pattern.matcher(src); m.matches()を返します。 } @Override public void initialize(ismobile constraintannotation){必須= constraintannotation.isRequired(); } @Override public boolean isvalid(string phone、constraintValidatorContext ConstraintValidatorContext){//携帯電話番号の実装if(必須){return ismobile(phone); } else {if(stringutils.isempty(電話)){return true; } else {return ismobile(電話); }}}} 3。カスタム注釈の関数をテストします
@datapublic classユーザー{@notnull @size(min = 2、max = 30、message = "名前の長さに問題があるかどうかを確認してください")private string name; @notnull @min(18)private Integer Age; //これは新しく追加された注釈@ismobileプライベートストリング電話です;}4。テスト
合格
携帯電話番号に問題があります
カスタム注釈が有効になっていることがわかります。
また、その場所を最適化し続け、新しいグローバル例外を作成することもできます。検証が失敗した場合は、グローバルなビジネスの例外を投げ、ビジネスの例外をキャッチしてから、ユーザーフレンドリーな迅速な情報を返します。
追加
また、メソッドの検証に合格することもできます。
1.コントローラーに@validatedアノテーションを追加します
2.検証アノテーション、@min、@maxなどをコントローラーメソッドに追加します。
@validated@retycontroller@springbootapplicationpublic class userapplication {public static void main(string [] args){springApplication.run(userapplication.class、args); } @RequestMapping( "/test2")public string test2(@ismobile string phone){return phone + "ok"; } @exceptionHandler(constraintViolationException.class)@responsebody public object handleconstraintviolationexception(constraintviolationexception cve){hashset <string> messagesEST = new Hashset(); for(constraintviolation constraintviolation:cve.getConstraintViolations()){massionSet.add(constraintviolation.getMessage()); }メッセージセットを返します。 }}クラス検証ルール
やっと
検証デバイスを使用することにより、すべてのコントローラーを確認する必要はありません。コードがはるかに爽やかであれば、それはそうなるでしょう。コードを非常に簡単に書きますが、メンテナンスをより簡単に、より明確に、より助長するコードの記述方法について考える必要があります。重複コードを書くことはあなたの時間の無駄です。
将来的にパラメーターの検証に遭遇した場合、最初に考えることは、直接チェックしないことです。特定のタイプの検証剤を書いたかどうかを確認でき、直接使用できます。
要約します
上記は、この記事のコンテンツ全体です。この記事の内容には、すべての人の研究や仕事に特定の参照値があることを願っています。ご質問がある場合は、メッセージを残してコミュニケーションをとることができます。 wulin.comへのご支援ありがとうございます。