4

私たちのアプリケーションでは、次のようなケースがあります。

  • 制約は特定の順序で評価する必要があります。(安いもの​​から高いものまで)
  • 制約は、フィールドごとの違反後に評価されるべきではありません。
  • すべてのフィールドを検証する必要があります。

最初の 2 つは、groupsequence が非常によく適合しています。しかし、私の 3 番目の要件については、解決する方法が見つかりませんでした。

public class AccountBean {

   @CheepValidation
   @ExpensiveValidation
   @VeryExpensiveValidation
   private String name;

   @CheepValidation
   @ExpensiveValidation
   @VeryExpensiveValidation
   private String surname
}

例えば、

たとえば、名前フィールドの VeryExpensiveValidation 制約に違反し、姓フィールドの ExpensiveValidation 制約に違反しているとします。

この場合、次のように表示する必要があります。

フィールド名の場合: VeryExpensiveValidation エラー メッセージのみ フィールド姓の場合: ExpensiveValidation エラー メッセージのみ

フィールド姓については、VeryExpensiveValidation 制約を評価しなかったことに注意してください。

JSR 303 で実装する方法はありますか?

ありがとう

4

2 に答える 2

3

グループと @GroupSequence を使用できますが、少し扱いに​​くいです。

public class AccountBean {

   @CheapValidation(groups=Name1.class)
   @ExpensiveValidation(groups=Name2.class)
   @VeryExpensiveValidation(groups=Name3.class)
   String name;

   @CheapValidation(groups=Surname1.class)
   @ExpensiveValidation(groups=Surname2.class)
   @VeryExpensiveValidation(groups=Surname3.class)
   String surname;

   public interface Name1 {}
   public interface Name2 {}
   public interface Name3 {}
   @GroupSequence({Name1.class, Name2.class, Name3.class})
   public interface Name {}

   public interface Surname1 {}
   public interface Surname2 {}
   public interface Surname3 {}
   @GroupSequence({Surname1.class, Surname2.class, Surname3.class})
   public interface Surname {}
}

次に、次のように検証します。

validator.validate(myAccountBean,
    AccountBean.Name.class, AccountBean.Surname.class)

重要なのは、2 つの完全に独立したグループ シーケンスを持つことです。

残念ながら、検証するすべてのフィールドのグループを明示的にリストする必要があるようです。「デフォルト」の @GroupSequence で動作させることができませんでした。誰でもこれを改善できますか?

于 2011-04-20T14:46:29.960 に答える