@Valid:
検証のための@Valid注釈は、パケットが属する:javax.validation.Valid。
①まず、エンティティクラスのような、注釈条件のチェックとして機能の適切なフィールドを追加する必要がある上:@min、次のコード(年齢の女の子に属するクラス属性を):
@Min(値= 18、メッセージ= 「 なしエントリ未成年者」)
プライベート整数年齢、
②そして注釈@Valid方法層コントローラに検証すべきパラメータ、及び修正を取得するためBindingResultオブジェクトを渡す必要性を追加テストの失敗は、次のコードの場合のフィードバック情報:
( "/女の子" @PostMapping ) 公共ガールaddGirl(@Validガール女の子、BindingResult bindingResult){ 場合(bindingResult.hasErrors()){ System.out.printlnは(bindingResult.getFieldError()getDefaultMessage()); リターン ヌル。 } 戻りgirlResposity.save(女の子)。 }
メッセージ属性の@Min注釈含量などの適切なフィールドに追加されたコンテンツを取得するためbindingResult.getFieldError.getDefaultMessage()メッセージ
@Validated:
@Validはjavax.validationの内部にあります。
@Valid主なパッケージは、Springの使用により提供されるチェック機構は、@Validatedです。@Validは、グループ化機能を提供していません。
特別@Validatedの使い方
1、グループ
ときに認証エンティティクラスの複数は、例えば:エンティティクラスIDの、新しい時間が必要である、それを更新するために必要とされていません。
検証は、グループによってグループ化されてもよいです
パケット・インターフェース・クラス(パケットの宛先を達成するために、グループの異なるクラスに割り当てることにより、クラスオブジェクト):
パッケージcom.valid.interfaces。 パブリック インターフェース最初{ }
エンティティクラス:
パッケージcom.valid.pojo; インポートjavax.validation.constraints.Size; インポートorg.hibernate.validator.constraints.NotEmpty; インポートcom.valid.interfaces.First; パブリック クラスの人々 { // パケット最初に、決定することができません空 @NotEmptyを(= {最初のグループ。クラス}) プライベート文字列ID; // 名前のフィールドが空でない、及び3-8の間の長さ @NotEmpty @size(MIN = 3、=最大8。。 ) プライベート文字列名を、 公衆getName文字列(){ 戻り名; } 公共 ボイドsetName(文字列名){ この .nameの= 名前。 } パブリック文字列のgetId(){ 戻りID。 } 公共 ボイドSETID(文字列ID){ この .ID = ID。 } }
注意:
(1)検証するために、毎回、デフォルトのグループを割り当てません
複数のパラメータが認証を必要とする場合(2)、異なるグループを分配する目的を達成することができます。例:
@NotEmpty(グループ= {まずクラス}) @size(MIN = 3、最大= 8、グループ= {第クラス}) プライベート文字列名。
制御カテゴリ:
パッケージcom.valid.controller。 輸入org.springframework.stereotype.Controller; 輸入org.springframework.validation.BindingResult; 輸入org.springframework.validation.annotation.Validated; 輸入org.springframework.web.bind.annotation.RequestMapping。 輸入org.springframework.web.bind.annotation.ResponseBody。 輸入com.valid.interfaces.First; 輸入com.valid.pojo.People; @Controller パブリック クラスFirstController { @RequestMapping( "/ addPeople" ) // 不需验证IDの 公共@ResponseBody文字列addPeople(@Validated人々のp、BindingResult結果) { System.out.printlnは( "人のID:" + p.getId()); もし(result.hasErrors()) { リターン "0" 。 } 戻り「1」。 } @RequestMapping( "/ updatePeople" ) // 需要验证IDの 公共 @ResponseBody文字列updatePeople(。@Validated({ファーストクラス})人々のp、BindingResult結果) { System.out.printlnは( "人のID:" + P。 getId())。 (result.hasErrors()) { リターン "0" 。 } 戻り「1」。 } }
注:
人民name属性:@Validatedグループのプロパティが追加されていない場合には、そのようなこの例のように、デフォルトの認証パケットの検証プロパティは、ありません。
@Validatedグループプロパティが追加されていない場合は、すべてのパラメータは、認証パケットの種類(NotEmpty @人々で、本実施形態の、すなわち、名前、サイズ属性グループが追加される@)されている、任意のパラメータが検証されていません
図2に示すように、系列グループ
デフォルトでは、検証の制約は、異なるグループに乱れているが、いくつかのケースでは、制約の検証の順序は重要です。
例:
定常状態が第1のグループによって検証されるべきである(1)制約検証の第2のセットは、定常状態の動作に依存します。
(2)時間がかかり、CPUとメモリの使用状況のセットを確認するには比較的大きい、最良のオプションは、最終的な検証を置くことです。そのため、グループの検証を行う際には、まだグループ系列の概念を提案した秩序の認証を、提供する必要があります。
配列を確認するためにそれを使用して、所定の順序に従わなければならない場合グループは、他のグループのシーケンスとして定義することができます。使用では、グループシーケンス検証は、グループの前に認証シーケンスが失敗した場合、グループはもはや後で検証与えられないとき。
パケット・インタフェース・クラス(@GroupSequenceソートノートで設定):
パッケージcom.valid.interfaces。 パブリック インターフェース最初{ }
パッケージcom.valid.interfaces。 パブリック インターフェース第{ }
パッケージcom.valid.interfaces。 輸入javax.validation.GroupSequence; @GroupSequence({まず。クラス、セカンド。クラス}) パブリック インターフェースグループ{ }
エンティティクラス:
パッケージcom.valid.pojo; インポートjavax.validation.constraints.Size; インポートorg.hibernate.validator.constraints.NotEmpty; インポートcom.valid.interfaces.First; インポートcom.valid.interfaces.Second; パブリック クラスの人々 { / / 最初のパケットが決定されたときに空でない @NotEmpty(グループ= {まずクラス}) プライベート;文字列ID // 名前のフィールドが空でない、及び3-8の間の長さ @NotEmpty(= {最初のグループ。クラス}) @size(MIN = 3、最大8 =、= {第2のグループ。。。クラス}) プライベート文字列名; 公共文字列のgetName(){ 戻り名。 } 公共 ボイドのsetName(文字列名){ この .nameの= 名前。 } パブリック文字列のgetId(){ 戻りID。 } 公共 ボイドSETID(文字列ID){ この .ID = ID。 } }
図3に示すように、認証複数のオブジェクト
機能モデルの方法で複数のオブジェクトを処理し、検証結果の複数を追加するオブジェクト
パッケージcom.valid.controller。 輸入org.springframework.stereotype.Controller; 輸入org.springframework.validation.BindingResult; 輸入org.springframework.validation.annotation.Validated; 輸入org.springframework.web.bind.annotation.RequestMapping。 輸入org.springframework.web.bind.annotation.ResponseBody。 輸入com.valid.pojo.People; 輸入com.valid.pojo.Person; @Controller パブリック クラスFirstController { @RequestMapping( "/ addPeople" ) 公衆@ResponseBody文字列addPeople(@Validated人々のp、BindingResult結果、検証済みのPerson P2 @、BindingResult結果2) { 場合(result.hasErrors()) { リターン "0" ; } であれば(result2.hasErrors()) { 戻り "-1" 。 } 戻り「1」。 } }
----------------
免責事項:この記事は、元の記事CSDNブロガー「プログラムは背の高い猿」であり、BY-SAの著作権契約CC 4.0に従って、再現し、元のソースのリンクを添付してくださいそしてこの文。
オリジナルリンクします。https://blog.csdn.net/gaojp008/article/details/80583301