dubbo~javax.validation和jakarta.validation的介绍与排雷

打印 上一主题 下一主题

主题 888|帖子 888|积分 2664

javax.validation和jakarta.validation都是用于Java中举行数据验证(validation)的相干API,它们提供了一套标准的验证框架,用于验证Java对象的属性是否符合指定的束缚条件。这两个API的作用类似,只是在Java EE平台的演进过程中发生了一些变革。
javax.validation:


  • javax.validation是最初引入Java EE平台的数据验证API,定义在JSR 303(Bean Validation 1.0)和JSR 380(Bean Validation 2.0)中。
  • 提供了注解(如@NotNull、@Size、@Email等)和验证器(Validator)等核心概念,用于对Java对象举行数据验证。
  • 可以通过Validator接口来执行验证操作,检查对象是否符合预定义的束缚。
  • 在Java EE 6及之后的版本中,可以直接使用javax.validation举行数据验证。
jakarta.validation:


  • jakarta.validation是随着Java EE平台向Jakarta EE的迁移而产生的,为了制止由于商标问题而将原有的javax包迁移到jakarta包下。
  • jakarta.validation与javax.validation具有相同的功能和API,但包名不同,属于Jakarta EE规范的一部分。
  • 随着Java EE的发展,将来新的版本可能会使用jakarta.validation作为默认的数据验证API。
作用:


  • 数据验证:通过注解和验证器,对Java对象的属性举行验证,确保数据符合指定的束缚条件。
  • 提高数据质量:有效地防止无效数据进入系统,提高数据的正确性和完备性。
  • 简化开辟:通过标准化的验证框架,简化数据验证逻辑的编写和维护工作。
总的来说,javax.validation和jakarta.validation都是用于数据验证的标准API,可以帮助开辟者实现对Java对象的数据验证功能,并提高系统的数据质量和稳定性。根据详细的Java平台版本和规范要求,选择符合的验证API来举行数据验证。
可能涉及到的包引用

jakarta
  1. <dependency>
  2.     <groupId>jakarta.validation</groupId>
  3.     <artifactId>jakarta.validation-api</artifactId>
  4.     <version>3.0.2</version>
  5. </dependency>
  6. <dependency>
  7.     <groupId>org.hibernate.validator</groupId>
  8.     <artifactId>hibernate-validator</artifactId>
  9.     <version>7.0.5.Final</version>
  10. </dependency>
复制代码
javax
  1. <dependency>
  2.     <groupId>javax.validation</groupId>
  3.     <artifactId>validation-api</artifactId>
  4.     <version>1.1.0.Final</version>
  5. </dependency>
  6. <dependency>
  7.     <groupId>org.hibernate</groupId>
  8.     <artifactId>hibernate-validator</artifactId>
  9.     <version>5.4.3.Final</version>
  10. </dependency>
复制代码
请留意,当你手动引用hibernate-validator包时,是不需要再手动引用validation-api的,由于它已经被hibernate-validator依赖了
什么时候需要手动引用jakarta.validation-api

当你需要手动使用Validation对象时,这时,你必须手动体现的引入jakarta.validation-api,或者早期的javax.validation:validation-api包。

错误清除

当你使用7.0.5.Final版本的validator后,可能出现如何错误 dubbo rest business exception, error cause is: null  message is: Unable to create a Configuration, because no Jakarta Bean Validation provider could be found. Add a provider like Hibernate Validator (RI) to your classpath.,这时,你需要升级你的版本,来解决这个错误,升级包如下:
  1. <dependency>
  2.    <groupId>org.hibernate</groupId>
  3.    <artifactId>hibernate-validator</artifactId>
  4.    <version>8.0.1.Final</version>
  5. </dependency>
复制代码
升级到8.0.1.Final之后,问题得到解决,可正常提供错误消息

验证工具类
  1. /**
  2. * bean对象属性验证 使用此方法等同于参数前加注解@Validated,@Valid
  3. **/
  4. public class BeanValidatorUtils {
  5.    private static final ValidatorFactory validatorFactory = Validation.buildDefaultValidatorFactory();
  6.    /**
  7.     * 校验实体中字段的合法性
  8.     * @param object
  9.     * @param groups
  10.     * @throws ConstraintViolationException
  11.     */
  12.    public static void validateWithException(Object object, Class<?>... groups) throws ConstraintViolationException {
  13.            Set<ConstraintViolation<Object>> constraintViolations = validatorFactory.getValidator().validate(object,
  14.                            groups);
  15.            if (!constraintViolations.isEmpty()) {
  16.                    throw new ConstraintViolationException(constraintViolations);
  17.            }
  18.    }
  19. }
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

熊熊出没

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表