jsr 303 検証ルールの定義、つまりコンテナー Bean のデフォルト グループの再定義に苦労しています。
@GroupSequence({Container.class, Container.Step2.class})
public class Container {
@NotNull
private String def;
@Valid
@Size(min = 20, groups = Container.Step2.class)
private List<Element> elems = new LinkedList<Element>();
public interface Step2{}
}
public class Element{
@NotNull
private String foo;
}
次の場合にのみ、コンテナー Bean のサイズを検証したいと思います。
- def プロパティは有効です
- elems コレクションを使用する Elements Bean の検証エラーはありません
デフォルトグループでコンテナを検証する場合:
Container c = new Container();
...
validator.validate(c)
内部要素 Bean の検証エラーが発生した場合でも、サイズ バリデーターが起動されます。
コンテナ クラスから @GroupSequence を削除し (コンテナのデフォルト グループの再定義をスキップ)、独自の GroupSequence を次のように定義するとします。
@GroupSequence({Default.class, Container2.Step2.class})
public interface AllValid{}
次に、AllValid グループによる検証:
Container c = new Container();
...
validator.validate(c, Container2.AllValid.class);
すべてが期待どおりに機能します。何か案は?