驗證組合中的多個欄位
在JPA 2.0/Hibernate 中,多個欄位上的簡單@NotNull 註解只會驗證單一字段。若要驗證欄位組合,請考慮使用類別級約束。
如 Bean 驗證先睹為快第二部分:自訂約束中所述,類別級約束允許將驗證邏輯應用於物件內的多個屬性。這對於依賴多個欄位的複雜驗證規則特別有用。
實作
要實現類別級約束,請定義一個註解(@AddressAnnotation)和一個約束驗證器(多國位址驗證器)。註解指定了要套用的驗證規則,而驗證器則實作了驗證欄位組合的邏輯。
@AddressAnnotation public class Address { @NotNull @Max(50) private String street1; @Max(50) private String street2; @Max(10) @NotNull private String zipCode; @Max(20) @NotNull String city; @NotNull private Country country; } public class MultiCountryAddressValidator implements ConstraintValidator<AddressAnnotation, Address> { public boolean isValid(Address object, ConstraintValidatorContext context) { // Validate zipcode and city depending on the country // ... } }
在驗證器中,將物件實例傳遞給 isValid 方法,允許存取所有用於驗證目的的欄位。驗證器可以檢查欄位之間的相互依賴關係,例如郵遞區號和城市之間的相關性。
用法
一旦定義,類別級限制就可以應用於使用註解的模型類別:
@AddressAnnotation public class MyModel { public Integer getValue1() { //... } public String getValue2() { //... } }
此註解指示應使用MultiCountryAddressValidator來驗證getValue1() 和getValue2() 的組合。如果兩個欄位都為空,則模型被視為無效。否則,該模型是有效的。
以上是如何在 JPA 2.0/Hibernate 中組合驗證多個欄位?的詳細內容。更多資訊請關注PHP中文網其他相關文章!