【发布时间】:2010-12-26 07:50:58
【问题描述】:
是否可以使用 Hibernate 验证器 API 将经过验证的对象存储在带有注释的字段中?例如,我想通过调用 Java 方法而不是在 Java bean 属性上放置 @Email 注释来验证 Email 地址。
【问题讨论】:
标签: hibernate
是否可以使用 Hibernate 验证器 API 将经过验证的对象存储在带有注释的字段中?例如,我想通过调用 Java 方法而不是在 Java bean 属性上放置 @Email 注释来验证 Email 地址。
【问题讨论】:
标签: hibernate
是的,这是可能的。尝试类似的东西,
Validator validator = Validation.buildDefaultValidatorFactory().getValidator();
Car car = new Car(null);
Set<ConstraintViolation<Car>> constraintViolations =
validator.validateProperty(car, "manufacturer");
看看here。
【讨论】:
zinan.yumaks 解决方案,他们正在创建一个您不需要的虚拟 Car 对象,这不是正确的方法。有一个更好的解决方案,validateValue 方法:
Validator validator = Validation.buildDefaultValidatorFactory().getValidator();
String emailAddress = "...";
Set<ConstraintViolation<User>> constraintViolations =
validator.validateValue(User.class, "email", emailAddress);
来自文档:
验证放置在
beanType类的名为propertyName的属性上的所有约束,属性值是否为value。
【讨论】:
validateValue 是执行此操作的正确方法,但最后一个参数应该是正在验证的值,例如manufacturer 或emailAddress。我会更新这个效果的答案(虽然我还没有测试过)。