Bean Validation 提供標準驗證框架,以註解聲明 JavaBean 約束,同一組驗證可在表現層、業務層、持久層共享。
public class Address {
@NotNull @Size(max=30) private String addressline1;
@Size(max=30) private String addressline2;
// getter/setter
}
@NotNull 禁止為空,@Size 限制長度。驗證時自動調用對應驗證器。
組合現有約束並指定驗證器:
@Size(min=5, max=5)
@ConstraintValidator(ZipcodeValidator.class)
@Documented @Target({ANNOTATION_TYPE, METHOD, FIELD})
@Retention(RUNTIME)
public @interface ZipCode {
String message() default "Wrong zipcode";
String[] groups() default {};
}
使用:@ZipCode private String addressline3; 驗證時先檢查長度 5,再執行 ZipcodeValidator。
@Valid 遞歸驗證關聯物件:
public class Order {
@OrderNumber private String orderNumber;
@Valid @NotNull private Address delivery;
}
驗證 Order 時自動驗證 Address 及其關聯物件。
JSF、JPA 等 Java EE 6 技術整合 Bean Validation,無需在多處重複聲明約束。