@Valid与@Validated

スプリング検証検証フレームワークは@Validated(SpringのJSR-303規格JSR-303規格は、の変異体である)認証メカニズムのためのパラメータ、のjavaxは@Valid(JSR-303標準仕様)を設け、パラメータの検証が直接BindingResultを設けてもよい提供します結果。どこにそのよう@NotNull検証ノートや他のオンラインどこでも、ここでは詳述しないなど、特定の分野について

コンプライアンスのために上院にコントローラを調べるには、@Validatedまたは@Validを使用すると、基本認証で大差はありません。しかし、いないグループでは、地元、ネストされた検証の二つの機能注釈:

1.パケット

@Validated:別のグループ分けに基づいて、異なる認証メカニズムを使用するときにグループ化機能を提供し、あなたが検証に参加することができ、インターネットにも情報が詳しく説明されていません。@Valid:JSR-303は、標準仕様として、機能的グルーピング吸収がありません。

 

2.ノートの場所

@Validated:それはタイプ、メソッドおよびメソッドパラメータに使用することができます。しかし、メンバーのプロパティ(フィールド)で使用されていません

@Valid:方法で使用することができ、コンストラクタ、メソッド、パラメータおよびメンバー属性(フィールド)

直接ネストされた関数は、属性(フィールド)の両方のメンバーのために使用することができるかどうかを確認の可用性に影響を与えます。

 

3.ネストされたことを確認し

検証にネスト2を比較すると、第1検証の下にネストされるかを説明。たとえば、私たちは今、エンティティは、項目を求めています:

パブリッククラス項目{

@NotNull(メッセージ=「idは空白にすることはできません」)
@Min(値= 1、メッセージ=「正の整数IDでなければならない」。)
プライベートロングID。

@NotNull(メッセージ=「小道具は空白にすることはできません」)
@size(= 1分、メッセージ=「少なくとも1つの属性」。)
プライベートリスト<プロップ>小道具;
}
属性の多くの項目、プロパティIDを持つ属性、プロパティ次のように値id、名前と属性値:

パブリッククラスプロップ{

@NotNull(メッセージ= "PID空ではない")
@Min(値= 1、メッセージ= "正の整数PIDでなければならない"。)
プライベートロングPID。

@NotNull(メッセージ= "VID空ではない")
@Min(値= 1、メッセージ= "正の整数でVIDでなければならない"。)
プライベートロングVID。

@NotBlank(メッセージ=「pidName空ではない」)
プライベート文字列pidName。

@NotBlank(メッセージ=「vidName空ではない」)
プライベート文字列vidName;
}
このエンティティの属性はまた、ID属性として独自の認証機構を有しており、値は、それが空白の属性名を空にし、属性値ができない属性。
今、私たちは次のように項目は、検証したい、アイテムの参加を受け入れるItemControllerを持っています:

@RestController
パブリッククラスItemController {

@RequestMapping(「/商品/追加」)
公共のボイドのaddItem(項目項目@Validated、BindingResult BindingResult){
doSomethingの();
}
}
図では、実体がない場合は、プロパティ項目は、余分な注釈を小道具、そして唯一の@NotNull @サイズに関係なく、空でないと検証の数を作るために@Validatedまたは@Valid検証、春の検証フレームワークアイテムIDになるだけや小道具を使用してパラメータ、のではない小道具のプロップエンティティフィールド検証の場、そしてが@Validatedされます@有効なメソッドのパラメータの前に加え、パラメータが自動的にネストされた検証されません。これは、パスリスト<プロップ>プロップが空または負のpidを持っている場合、検証パラメータが検出されないことを意味します。

巣認証できるようにするには、それがなければなりません手動でフィールドのアイテムのエンティティのエンティティ内のフィールドが検証されなければならないことは明らか小道具。@Validatedので、メンバーのプロパティ(フィールド)には使用できませんが、@Validはメンバー属性(フィールド)に追加することができ、かつ@Valid上のクラスのノートも、それは、その後、私たちは推測することができ、ネストされた検証をサポートしていることを示しています@Validときパラメータ自動ネスティング認証方式を追加することはできませんが、確認するために@Valid @Validatedまたはネストされたメソッドのパラメータに合わせて、それぞれのフィールドのバリデーションクラスの巣に必要と。

次のように私たちは、Itemクラスを変更しました:

パブリッククラス項目{

@NotNull(メッセージ=「idは空白にすることはできません」)
@Min(値= 1、メッセージ=「正の整数IDでなければならない」。)
プライベートロングID。

@Valid //ネストされた検証が@Validなければなりません
@NotNull(メッセージ=「小道具を空にすることはできません」)
(。1、メッセージ=「小道具を持っている、少なくとも1つのカスタム属性」=分)@size
プライベートリスト<プロップ>小道具。
}
我々は、次に、検証ネストアイテムに対して行うことができるパラメータのItemControllerのaddItem関数に@Validated又は@Validを使用します。ケースプロップフィールド内の対応する項目の小道具が検出される空、スプリング検証フレームワークが含まれている場合、この時点で、bindingResult適切なエラーが記録されています。

ネスティング検証機能の@Validatedと@Validの違いを要約すると:

@Validated:パラメータの営巣個々の検証の過程で使用することはできません。メンバーの属性(フィールド)で使用されていない、フレームには、プロンプト検証を入れ子にすることはできません。注釈が検証にネストのネスト@Validで確認することができます。

@Valid:パラメータの営巣個々の検証の過程で使用することはできません。プロパティは、部材(フィールド)で使用することができ、入れ子検証認証フレームワークのための要求。注釈が検証にネストのネスト@Validで確認することができます。
----------------
免責事項:この記事は元の記事CSDNブロガー「花郎唯一の結び目」であり、BY-SAの再現著作権契約、CC 4.0に従って、元のソースのリンクを添付してくださいそしてこの文。
オリジナルリンクします。https://blog.csdn.net/qq_27680317/article/details/79970590

おすすめ

転載: www.cnblogs.com/muxi0407/p/11672349.html