验证组合中的多个字段
在 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中文网其他相关文章!