2016-05-27 3 views
0

クラスAがクラスBを関連付けているとします。私はAとBの間でデータ検証が必要なので、クラスAのクラスレベルにカスタム注釈を追加し、別のグループにも作成します。私はAとBの両方で行われた基本的な検証の後に実行されるカスタムの検証をしたいが、そうでないようですが、Bの検証は後に実行されます、どのようにカスタム検証前に行うことができますか? デフォルトグループのグループシーケンスを再定義するクラスレベルで@GroupSequenceを使用クラスレベルの注釈の前に@validでアノテーション付けされたプロパティでバリデーションを実行する方法は?

@XXXValidation(groups = Second.class) 
@GroupSequence({A.class, Second.class}) 
public class A { 
    @valid 
    private B b; 
} 
public class B { 
    @NotNull 
    private String name; 
} 

答えて

0

: ここではサンプルコードです。これはクラスにとってローカルであり、どの関連にも伝播されません。 デフォルトのグループは、関連付けられたクラスで検証されます。 Bean検証仕様の該当する章 - http://beanvalidation.org/1.1/spec/#constraintdeclarationvalidationprocess-groupsequence-redefiningdefaultgroupも参照してください。

@Validは、グループの概念と直交する概念です。 2つのグループ が連続している場合、2番目のグループが評価される前に、すべての関連オブジェクト が最初のグループに渡されなければなりません。ただし、デフォルトの グループシーケンスの上書きは、定義されているクラスに対してローカルであり、 は関連付けられたオブジェクトに伝播されません。

あなたが全体のオブジェクトグラフが与えられたグループのために検証されていることを確認したい場合は、「要求」この順Validator.validateにトップレベルのコールの一部としてする必要があります。自分で検証をコントロールする場合は、これは簡単です。 Bean検証を別のフレームワークの一部として使用している場合は、グループを指定する方法に関するドキュメントを参照する必要があります。たとえば、JPAは、JPAライフサイクルの一部のイベントとして評価されるグループ(シーケンス)を定義するために設定できるプロパティのセットを定義します(たとえばpersistence.xml)。

ユースケースによっては、@ConvertGroupも使用できる場合があります。 Hibernate Validatorの仕様を確認するか、online documentationを参照してください。

関連する問題