Hibernate Validator 6.0.7.Final 之二(详解Validator和ConstraintViolation)

Validator接口在bean的校验中扮演非常重要的角色。本文将详细讲解该接口。

  • 获取该接口的方法
ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
validator = factory.getValidator();
  • 该接口中的重要方法
<T> Set<ConstraintViolation<T>> validate(T object, Class<?>... groups);

<T> Set<ConstraintViolation<T>> validateProperty(T object, String propertyName, Class<?>... groups);
													 
<T> Set<ConstraintViolation<T>> validateValue(Class<T> beanType, String propertyName, Object value, Class<?>... groups);
  1. 第一个方法可以对整个bean对象做校验(常用)
  2. 后面2个方法可以对单个属性进行校验(不常用)
  3. 三个方法的返回值都是一个ConstraintViolation类型的集合,如果校验成功,该集合为空;否则,该集合非空,集合中的每一个元素(ConstraintViolation类型)对应一个违反的约束。
  4. ConstraintViolation描述了违反的约束的相关信息,例如:对应的bean、对应的属性、错误消息、错误消息模板等等,具体见例子中的打印结果。

下面通过例子展示Validator接口中的三个重要方法和ConstraintViolation

  • 三个例子都会用到的bean
public class User {

    @NotEmpty(message = "名称不能为空")
    @Size(min = 4, max = 32, message = "名称长度必须在{min}和{max}之间")
    private String name;

    @NotEmpty(message = "邮件地址不能为空")
    @Email(message = "邮箱格式不正确")
    private String email;

    @AssertTrue
    private boolean isStudent;

    public User(String name, String email, boolean isStudent) {
        this.name = name;
        this.email = email;
        this.isStudent = isStudent;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public boolean isStudent() {
        return isStudent;
    }

    public void setStudent(boolean student) {
        isStudent = student;
    }
}
  • 第一个例子,测试validate方法
@Test
public void validateMethodOneTest() {
    User user = new User("su", "tom", false);
    validator.validate(user).forEach(System.out::println);
}

// 查看结果
ConstraintViolationImpl{interpolatedMessage='名称长度必须在4和32之间', propertyPath=name, rootBeanClass=class com.qs.mmeng.hibernate.validator.constraints.interfacee.User, messageTemplate='名称长度必须在{min}和{max}之间'}
ConstraintViolationImpl{interpolatedMessage='邮箱格式不正确', propertyPath=email, rootBeanClass=class com.qs.mmeng.hibernate.validator.constraints.interfacee.User, messageTemplate='邮箱格式不正确'}
ConstraintViolationImpl{interpolatedMessage='只能为true', propertyPath=isStudent, rootBeanClass=class com.qs.mmeng.hibernate.validator.constraints.interfacee.User, messageTemplate='{javax.validation.constraints.AssertTrue.message}'}
  • 第二个例子,测试validateProperty方法
@Test
public void validateMethodTwoTest() {
    User user = new User("su", "tom", false);
    validator.validateProperty(user, "name").forEach(System.out::println);
    validator.validateProperty(user, "email").forEach(System.out::println);
    validator.validateProperty(user, "isStudent").forEach(System.out::println);
}
// 查看结果
ConstraintViolationImpl{interpolatedMessage='名称长度必须在4和32之间', propertyPath=name, rootBeanClass=class com.qs.mmeng.hibernate.validator.constraints.interfacee.User, messageTemplate='名称长度必须在{min}和{max}之间'}
ConstraintViolationImpl{interpolatedMessage='邮箱格式不正确', propertyPath=email, rootBeanClass=class com.qs.mmeng.hibernate.validator.constraints.interfacee.User, messageTemplate='邮箱格式不正确'}
ConstraintViolationImpl{interpolatedMessage='只能为true', propertyPath=isStudent, rootBeanClass=class com.qs.mmeng.hibernate.validator.constraints.interfacee.User, messageTemplate='{javax.validation.constraints.AssertTrue.message}'}
  • 第三个例子,测试validateValue方法
@Test
public void validateMethodThreeTest() {
    validator.validateValue(User.class, "name", "su").forEach(System.out::println);
    validator.validateValue(User.class, "email", "invalid-email-address")
            .forEach(System.out::println);
    validator.validateValue(User.class, "isStudent", false).forEach(System.out::println);
}
// 查看结果
ConstraintViolationImpl{interpolatedMessage='名称长度必须在4和32之间', propertyPath=name, rootBeanClass=class com.qs.mmeng.hibernate.validator.constraints.interfacee.User, messageTemplate='名称长度必须在{min}和{max}之间'}
ConstraintViolationImpl{interpolatedMessage='邮箱格式不正确', propertyPath=email, rootBeanClass=class com.qs.mmeng.hibernate.validator.constraints.interfacee.User, messageTemplate='邮箱格式不正确'}
ConstraintViolationImpl{interpolatedMessage='只能为true', propertyPath=isStudent, rootBeanClass=class com.qs.mmeng.hibernate.validator.constraints.interfacee.User, messageTemplate='{javax.validation.constraints.AssertTrue.message}'}

需要注意的是,validateProperty和validateValue方法不支持@Valid,也就是不支持级联校验。

  • 6
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
### 回答1: Hibernate Validator 6.0.13.Final 是一个用于验证 Java Bean 的开源框架。它基于 JSR-380 规范,提供了一套强大的校验工具,可以对 Java Bean 中的属性进行各种类型的验证。 Hibernate Validator 可以用于验证输入数据的正确性,以确保数据在存储到数据库之前是合法的。它可以验证各种类型的数据,包括字符串、数字、日期、集合等。 使用 Hibernate Validator,我们可以通过注解的方式来定义验证规则。例如,我们可以使用`@NotNull`注解来表示字段不能为空,`@Min`注解来表示字段的最小值,`@Email`注解来表示字段需符合电子邮件格式等等。这些注解可以直接应用在 Java Bean 的属性上。 除了注解,Hibernate Validator 也提供了方法级别的验证。我们可以使用 Validator 对象来手动校验数据。例如,我们可以使用 `validate()` 方法来对一个 Java Bean 进行验证,并获取校验结果。 Hibernate Validator 还支持国际化,可以根据不同的地区来运行不同的验证规则。这样,我们可以根据用户的地区设置来展示相应的错误信息。 总的来说,Hibernate Validator 6.0.13.Final 是一个功能强大、易于使用的验证框架,可以帮助我们快速、准确地校验 Java Bean 中的数据。无论是在后端的数据校验,还是在前端的表单校验,Hibernate Validator 都是一个非常实用的工具。 ### 回答2: Hibernate Validator是一个基于Java的验证框架,用于验证Java实体对象的数据的准确性和有效性。它是Hibernate的一部分,用于验证实体对象在被持久化之前的数据约束。Hibernate Validator遵循Bean Validation规范,能够通过注解、XML配置或程序化方式来定义验证规则。 Hibernate Validator 6.0.13.FinalHibernate Validator框架的一个特定版本。它是Hibernate Validator的最新发布版本,其主要目的是为了提供更好的性能和更多的功能。在这个版本中,修复了以前版本中的一些问题和漏洞,同时增加了新的特性。 通过Hibernate Validator 6.0.13.Final,你可以轻松地为你的Java实体对象定义各种验证规则。例如,你可以使用注解来指定一个属性的最小或最大值,或者限制它的长度。你还可以使用正则表达式来验证数据格式的正确性。此外,Hibernate Validator还支持自定义的验证规则,你可以根据自己的需求来定义并应用。 使用Hibernate Validator 6.0.13.Final的好处是它提供了一种简单而灵活的方式来验证数据。不仅可以在持久化实体对象之前进行验证,还可以在任何需要验证的地方使用它。它还能够与其他验证框架和库集成,使验证过程更加全面和可靠。 总之,Hibernate Validator 6.0.13.Final是一个功能强大和易于使用的验证框架,可帮助开发人员确保Java实体对象的数据的有效性和准确性。它提供了灵活的验证规则定义方式,并具有良好的性能和可扩展性。无论是在简单的数据验证还是复杂的业务规则验证方面,Hibernate Validator都是一个不错的选择。 ### 回答3: Hibernate Validator是一个流行的Java Bean验证框架。版本6.0.13.finalHibernate Validator的一个特定版本。该版本是最终版本,意味着它是开发周期中的最后一个版本,并且经过充分测试和验证。 Hibernate Validator的主要目的是验证Java Bean的约束和规则。它通过注解、XML配置和编程方式来定义和管理这些约束。使用Hibernate Validator可以确保Java Bean的属性和值满足特定的条件和规则,从而提高应用程序的数据完整性和可靠性。 在6.0.13.final版本中,Hibernate Validator提供了一些新功能和改进。这些改进可能是修复了一些缺陷、增强了现有功能,或者引入了新的功能。例如,该版本可能会增加对新的验证注解的支持,提供更好的错误处理和错误消息,或者改进和优化验证性能。 要使用Hibernate Validator 6.0.13.final,您需要在您的项目中添加相应的依赖项,并按照官方文档的指示进行配置和使用。您可以从Maven中央仓库或Hibernate Validator的官方网站下载该版本的jar文件。 总的来说,Hibernate Validator 6.0.13.final是一个在Java Bean验证方面非常有用的框架。它通过提供简单和灵活的验证机制,帮助开发人员确保数据的有效性和一致性。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值