Java EE 6 引入 Bean Validation (JSR 303),以註解方式對 Java Bean 進行約束驗證,不限層次、不限編程模型,靈活易用。核心目標:消除表現層、業務層、持久層重複編寫相同驗證邏輯的痛點,將驗證規則直接聲明於領域模型本身,實現「驗證邏輯與業務代碼分離、跨層復用」。

傳統架構中,同一 Java Bean 在 Controller、Service、DAO 各層皆需驗證,極易導致不一致與維護地獄。

Bean Validation 以註解覆蓋 XML 描述符,將驗證規則內聚於 Bean 定義,API 為通用 Java Bean 模型擴展,服務端與客戶端均可使用,最大特點:易用、靈活、標準化。
參考實現:Hibernate Validator 4.0(本系列所有範例均基於此)。
public class Employee {
@NotNull(message = "The id of employee can not be null")
private Integer id;
@NotNull(message = "The name of employee can not be null")
@Size(min = 1, max = 10, message = "The size of employee's name must between 1 and 10")
private String name;
// getter/setter 省略
public static void main(String[] args) {
Employee emp = new Employee();
emp.setName("Zhang Guan Nan"); // 故意超長
ValidatorFactory vf = Validation.buildDefaultValidatorFactory();
Validator validator = vf.getValidator();
Set<ConstraintViolation<Employee>> violations = validator.validate(emp);
for (ConstraintViolation<Employee> v : violations) {
System.out.println(v.getMessage());
}
}
}
The size of employee's name must between 1 and 10
The id of employee can not be null
註解 @NotNull、@Size 聲明約束,驗證器自動檢查實例狀態並輸出違規訊息。
ConstraintValidator 邏輯(第 2 部分)。Validator 執行驗證(第 3 部分)。後續章節將逐層展開,構建完整知識體系。