B/SシステムのHTTP要求データの検証のほとんどは、クライアント側で行われます。これは、シンプルさとユーザーエクスペリエンスの考慮事項でもありますが、セキュリティ要件が高いシステムではサーバー側の検証が不可欠です。
Spring3は、JSR-303検証フレームワークをサポートしています。 JSR-303は、BeanValidationと呼ばれるJava EE 6のサブスペックです。公式リファレンスの実装は、冬眠バリデーターです(冬眠ormとは何の関係もありません)。 JSR 303は、Java Beansのフィールドの値を検証するために使用されます。
VALIDATORは、主に、空のかどうか、パスワードの長さが6桁を超えるかどうか、純粋にデジタルであるかどうかなど、ユーザーが送信したデータの合理性をチェックします。
検証とスプリングブートと組み合わせて
1.タグをBeanに追加します
コードの一部:
タグを属性に追加する必要があります@notblankタグの意味は、記事の最後に説明されています
パブリッククラスユーザー{private integer id; @notblank(message = "{user.name.notblank}")private string name;プライベート文字列ユーザー名;2。コントローラーの検証をオンにします
@validatedタグをコントローラーのリクエストパラメーターに追加して、検証を有効にします
@RequestMapping(method = requestmethod.post)public user create(@requestbody @validated user user){return userservice.create(user); }3.リソースの下に新しいエラーメッセージ構成ファイルを作成する
リソースディレクトリに新しいプロンプトメッセージ構成ファイル「validationmessages.properties」を作成する
注:名前は「validationmessages.properties」でなければなりません。Springbootは、ClassPathのvaridationmessages.propertiesのエラーメッセージを自動的に読み取ります。
VALIDATIONMESSAGES.PROPERTIESファイルはASCIIとしてエンコードされます。データ型はキー値です。キー「user.name.notblank」は、最初のステップ豆のブレースの対応するメッセージ値です。
値は迅速なメッセージですが、ASCIIです。 (コンテンツは「名前は空にすることはできません」です)
4.例外ハンドラーをカスタマイズして、エラーメッセージをキャッチします
検証が失敗すると、例外がスローされます。例外メッセージは、validationmessages.propertiesで構成された迅速な情報です。例外ハンドラーはここで定義されています。例外情報をキャプチャします(検証に合格できない複数のアイテムがある可能性があるため、それらは均一にキャプチャおよび処理されます)。 (これはフロントエンドとバックエンドの個別の送信者です)
public void methodargumentnotvalidexception(例外Ex、httpservletrequest request、httpservletresponse Response){logger.error( ":" + commonutil.gethttpclientinfo(request)、ex); MethodArgumentNotValidexception c =(methodargumentnotvalidexception)ex;リスト<ObjectError>エラー= C.getBindingResult()。getAllerrors(); stringbuffer errormsg = new StringBuffer(); errors.stream()。 pouplateExceptionResponse(response、httpstatus.internal_server_error、errormsg.tostring()); } private void pouplateExceptionResponse(httpservletResponse応答、httpstatus errorcode、string errormessage){try {respons.senderror(errorcode.value()、errormessage); } catch(ioException e){logger.error( "応答エラーの存在不能"、e); }}5。いくつかのタグの意味を添付します
| 制限 | 説明します |
|---|---|
| @null | nullにのみ制限します |
| @notnull | 制限はヌルであってはなりません |
| @assertfalse | 制限はfalseでなければなりません |
| @asserttrue | 制限は真でなければなりません |
| @decimalmax(値) | 制限は、指定された値よりも大きい数字でなければなりません。 |
| @decimalmin(値) | 制限は指定された値以上の数でなければなりません |
| @digits(整数、分数) | 制限は小数である必要があり、整数部の桁数は整数を超えることはできません。 |
| @未来 | 制限は将来の日付でなければなりません |
| @max(value) | 制限は、指定された値よりも大きい数字でなければなりません。 |
| @min(値) | 制限は指定された値以上の数でなければなりません |
| @過去 | 制限は過去の日付でなければなりません |
| @pattern(値) | 制限は、指定された正規表現に準拠する必要があります |
| @size(max、min) | 文字の長さの制限は、最小と最大の間でなければなりません |
| @過去 | 注釈の要素値(日付タイプ)が現在よりも早いことを確認してください |
| @notempty | 検証アノテーションの要素値が無効であり、空ではないことを確認します(文字列の長さは0ではなく、収集サイズは0ではありません) |
| @notblank | 注釈の要素値が空でないことを確認します(nullではなく、最初のスペースを削除した後の長さは0です)。 @notemptyとは異なり、 @notblankは文字列にのみ適用され、比較時に文字列スペースを削除します。 |
| 注釈の要素値が電子メールであることを確認し、正規表現やフラグを使用してカスタムメール形式を指定することもできます。 |
例
@pattern(regexp = "^[a-za-z0-9]+$"、message = "{account.username.space}")@size(min = 3、max = 20、message = "{account.username.size}")例2
ここでは、主に学習に注釈を使用します。最初に私たちのニーズについて話しましょう:
Demo.htmlがあり、ページには、2つの要素名入力ボックス、パスワード入力ライブラリ、および送信ボタンがあります。
バックグラウンドに送信した後、検証のためにバリデーターを使用してから、エラーがある場合はdemo.htmlに転送します。
最初にユーザーの入力を受信するためのエンティティクラスを作成し、検証者アノテーションを使用して確認します。
パッケージcom.kfit.demo; Import org.hibernate.validator.constraints.length; import org.hibernate.validator.constraints.notempty;パブリッククラスデモ{プライベートロングID; @notempty(message = "name nail be veyt")プライベート文字列名; @notempty(message = "パスワードは空にすることはできません")@length(min = 6、message = "パスワードの長さは6桁未満にすることはできません")プライベート文字列パスワード。 publiclong getId(){return id; } publicVoid setID(longid){this.id = id; } public string getname(){return name; } public void setName(string name){this.name = name; } public string getPassWord(){パスワードを返します。 } public void setPassword(string password){this.password = password; } @Override public String toString(){return "demo [id =" + id + "、name =" + name + "、password =" + password + "]"; }}上記はこの記事のすべての内容です。みんなの学習に役立つことを願っています。誰もがwulin.comをもっとサポートすることを願っています。