【问题标题】:How can I use a Hibernate validator without an annotation on a field?如何在字段上没有注释的情况下使用 Hibernate 验证器?
【发布时间】:2010-12-26 07:50:58
【问题描述】:

是否可以使用 Hibernate 验证器 API 将经过验证的对象存储在带有注释的字段中?例如,我想通过调用 Java 方法而不是在 Java bean 属性上放置 @Email 注释来验证 Email 地址。

【问题讨论】:

    标签: hibernate


    【解决方案1】:

    是的,这是可能的。尝试类似的东西,

    Validator validator = Validation.buildDefaultValidatorFactory().getValidator();
    
    Car car = new Car(null);
    
    Set<ConstraintViolation<Car>> constraintViolations =
        validator.validateProperty(car, "manufacturer");
    

    看看here

    【讨论】:

      【解决方案2】:

      zinan.yumaks 解决方案,他们正在创建一个您不需要的虚拟 Car 对象,这不是正确的方法。有一个更好的解决方案,validateValue 方法:

      Validator validator = Validation.buildDefaultValidatorFactory().getValidator();
      
      String emailAddress = "...";
      
      Set<ConstraintViolation<User>> constraintViolations = 
          validator.validateValue(User.class, "email", emailAddress);
      

      来自文档:

      验证放置在beanType 类的名为propertyName 的属性上的所有约束,属性值是否为value

      【讨论】:

      • Re:“创建一个您不需要的虚拟 Car 对象”-您展示的示例是使用 Car 的实例。 OP 是(我是!)试图在没有对象的情况下实现这一点。例如,字符串“xyz@yahoo.com”是一个有效的电子邮件地址吗?
      • @RoyTruelove: 嗯,我写这个的时候好像有点迷糊,现在想不起来细节了。感谢您指出。看起来validateValue 是执行此操作的正确方法,但最后一个参数应该是正在验证的值,例如manufactureremailAddress。我会更新这个效果的答案(虽然我还没有测试过)。
      猜你喜欢
      • 2014-10-05
      • 2018-11-03
      • 1970-01-01
      • 2011-10-18
      • 1970-01-01
      • 2018-04-15
      • 2019-09-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多