5

特定の制約グループ(デフォルトではない)のカスタムバリデーターを作成していますが、ランタイムで以下のエラーが発生します。

なぜデフォルト値を空にする必要があるのか​​興味があります。あなたの意見を共有することができれば感謝します。ありがとう :)

xxx.model.validation.CustomValidationには制約アノテーションが含まれていますが、groupsパラメーターのデフォルト値は空の配列ではありません。

StackTrace:org.hibernate.validator.metadata.ConstraintHelper.assertGroupsParameterExists(ConstraintHelper.java:335)org.hibernate.validator.metadata.ConstraintHelper.isConstraintAnnotation(ConstraintHelper.java:282)

4

1 に答える 1

2

どのシナリオで制約を特定のグループにバインドすることが役立つかわかりません。

グループは、部分的な検証(およびシーケンスの検証)に使用されます。クラスに10個のフィールドがある場合、そのうちの8個をAで、2個をBでマークできます。次に、 AグループまたはBグループのフィールドのみを検証することを決定できます。逆に、 C@MyConstraintという名前の特定のグループに属している必要があります。意味がない。グループは、多かれ少なかれ、同じクラスの他のフィールドからいくつかのフィールドを区別するために使用される名前です。絶対的な意味はありません。グループは、制約定義ではなく検証に役立ちます。グループは、制約ではなくフィールドに関連しています。

さらに、制約定義でグループ名を非表示にすると、フィールドがすべて一緒に検証されていると考えることができるため、エラーが発生する可能性があります。

@Email
private String mail;

@Password
private String pass;

@VAT
private String vatCode;

部分的な検証があるかどうかを確認できますか?

編集

2番目のコメントに関連して:制約のない5つのフィールドを持つクラスがあるとします。それらのうちの3つは整数です。これらの3つのフィールドの合計を検証する場合は、提案するようにクラスレベルの制約を作成する必要があります。このようにして、カスタムアノテーションはフィールドではなくクラスに適用されるので、フィールドでグループをどのように定義できますか?

代わりに、次のようなものを使用できます。

@Sum(min = 250, fields = {"length", "width", "height"})
public class MyClass {
    private String type;
    private String code;
    private int length;
    private int width;
    private int height;
        ...
}
于 2012-08-02T13:56:51.887 に答える