Bean Validation Early Draft Preview
JSR 303のBean ValidationにEarly Draft Previewが出たとのことで、早速目を通してみました。個人的に面白いと思った機能を挙げていきます。
Multi-valued constraints
以下の例のように、同一種類のアノテーションを配列で複数指定できるようです。
public class Bean { @Patterns({ @Pattern(regex = "^[0-9-]+$", message = "numbers only"), @Pattern(regex = "^...-....$", message = "must match XXX-XXXX") }) private String zipCode; }
StandardConstraint description
以下のStandardConstraintインターフェイスを制約クラスに実装させることで、バリデーション制約のメタデータを外部フレームワーク向けに公開できる仕組みです。
public interface StandardConstraint { StandardConstraintDescriptor getStandardConstraintDescriptor(); } public class StandardConstraintDescriptor { public Boolean getNullability() { return null; } public Integer getPrecision() { return null; } public Integer getScale() { return null; } public Integer getLength() { return null; } }
この機構は、モデルクラスからDBスキーマを自動生成するような場面で役に立つようです。例えば、上記のgetNullability()がfalseを返す場合、CREATE TABLE文にNOT NULL制約が必要だと判断できます。
Graph validation
オブジェクトグラフを走査して、グラフ内の全オブジェクトをバリデーションできるようです。
Group and group sequence
制約にグループ名を付けて、制約集合のサブセットを構成できるようです。これにより、特定のグループに属する制約だけをバリデーション対象にできます。
使いどころとしては、「状況非依存の制約グループと状況依存の制約グループに分ける」とか「瞬時に検証できる制約グループと検証コストの高い制約グループに分ける」といったシナリオが考えられるそうです。