@Validと@Validated要約分化(ターン)

@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

おすすめ

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