dubbo~javax.validation和jakarta.validation的介绍与排雷
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
<dependency>
<groupId>jakarta.validation</groupId>
<artifactId>jakarta.validation-api</artifactId>
<version>3.0.2</version>
</dependency>
<dependency>
<groupId>org.hibernate.validator</groupId>
<artifactId>hibernate-validator</artifactId>
<version>7.0.5.Final</version>
</dependency>
javax
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>1.1.0.Final</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>5.4.3.Final</version>
</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.,这时,你需要升级你的版本,来解决这个错误,升级包如下:
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>8.0.1.Final</version>
</dependency>
升级到8.0.1.Final之后,问题得到解决,可正常提供错误消息

验证工具类
/**
* bean对象属性验证 使用此方法等同于参数前加注解@Validated,@Valid
**/
public class BeanValidatorUtils {
private static final ValidatorFactory validatorFactory = Validation.buildDefaultValidatorFactory();
/**
* 校验实体中字段的合法性
* @param object
* @param groups
* @throws ConstraintViolationException
*/
public static void validateWithException(Object object, Class<?>... groups) throws ConstraintViolationException {
Set<ConstraintViolation<Object>> constraintViolations = validatorFactory.getValidator().validate(object,
groups);
if (!constraintViolations.isEmpty()) {
throw new ConstraintViolationException(constraintViolations);
}
}
}
dubbo~javax.validation和jakarta.validation的介绍与排雷的更多相关文章
- JSR303/JSR-349,hibernate validation,spring validation 之间的关系
JSR303是一项标准,JSR-349是其的升级版本,添加了一些新特性,他们规定一些校验规范即校验注解,如@Null,@NotNull,@Pattern,他们位于javax.validation.co ...
- web.xml文件报错'org.springframework.web.filter.CharacterEncodingFilter' is not assignable to 'javax.servlet.Servlet,jakarta.servlet.Servlet'
在web.xml文件中出现下列错误:'org.springframework.web.filter.CharacterEncodingFilter' is not assignable to 'jav ...
- 开源:Taurus.MVC-Java 版本框架 (支持javax.servlet.*和jakarta.servlet.*双系列,内集成微服务客户端)
版本说明: 因为之前有了Taurus.MVC-DotNet 版本框架,因此框架标了-Java后缀. .Net 版本: 开源文章:开源:Taurus.MVC-DotNet 版本框架 (支持.NET C ...
- ssis error at other ssis.pipeline "ole db destination" failed validation and returned validation status
我在修改一个ssis的包,发现这个destination的表被改过了.所以就重建了表.就导致了这个错误. 打开包重新检查下表结构的匹配就好了
- JSR 303 - Bean Validation 介绍及最佳实践
JSR 303 - Bean Validation 介绍及最佳实践 JSR 303 – Bean Validation 是一个数据验证的规范,2009 年 11 月确定最终方案.2009 年 12 月 ...
- javax.validation.ValidationException: Unable to create a Configuration, because no Bean Validation provider could be found. Add a provider like Hibernate Validator (RI) to your classpath.
项目依赖 <dependency> <groupId>javax</groupId> <artifactId>javaee-api</artifa ...
- JSR 303 - Bean Validation 介绍及最佳实践(转)
JSR 303 – Bean Validation 是一个数据验证的规范,2009 年 11 月确定最终方案.2009 年 12 月 Java EE 6 发布,Bean Validation 作为一个 ...
- Caused by: java.lang.NoClassDefFoundError: javax/validation/ParameterNameProvider
问题现象:今天部署代码的时候发现,在beta环境可以正常部署,但是到了test环境就一直不成功,我以为是环境问题,就重新部署,但是没效,看了看日志发现问题是:Caused by: java.lang. ...
- 利用 Bean Validation 来简化接口请求参数校验
团队新来了个校招实习生静静,相互交流后发现竟然是我母校同实验室的小学妹,小学妹很热情地认下了我这个失散多年的大湿哥,后来... 小学妹:大湿哥,咱们项目里的 Controller 怎么都看不到参数校验 ...
- springMVC引入Validation详解
本文简单介绍如何引入validation的步骤,如何通过自定义validation减少代码量,提高生产力.特别提及:非基本类型属性的valid,GET方法的处理,validation错误信息的统一re ...
随机推荐
- Java:得到指定年份、月份、周次的最后一天
使用Java的工具类Calendar 通过Calendar可以进行很多的日期操作 /** * 得到指定年份的最后一天 * @param year */ public static void getLa ...
- ES6中数组新增了哪些扩展?
一.扩展运算符的应用 ES6通过扩展元素符...,好比 rest 参数的逆运算,将一个数组转为用逗号分隔的参数序列 console.log(...[1, 2, 3])// 1 2 3console.l ...
- b站的视频进度条悬浮预览视频画面实现方式
1.探究 在看b站视频,滑到进度条的时候突发奇想,想知道这个预览图是怎么做到的 打开控制台,发现每次移动鼠标悬浮位置的时候都会发出一条网络请求,并且该请求的size显示来源于内存,当时以为每次加载视频 ...
- hashchang事件是异步更新的
1.代码 // 此时会触发hashchange location.hash = '/test' window.addEventListener('hashchange', () => { con ...
- gitee基于webhooks实现前端简单自动化部署
1.为什么采用自动化部署 简而言之,程序员优秀传统:懒 =>高级生产力. 基于gitee进行的自动化部署,服务器环境为Ubuntu 基于webhooks进行的自动化部署更加轻快便捷 2.部署步骤 ...
- 使用ollama分别在我的window、mac、小米手机上部署体验llama3-8b
1.ollama到底是个什么玩意 一句话来说, Ollama 是一个基于 Go 语言开发的简单易用的本地大模型运行框架.可以将其类比为 docker(有类似docker中的一些常规命令list,pul ...
- 力扣1098(MySQL)-小众书籍(中等)
题目: 书籍表 Books: book_id 是这个表的主键 订单表 Orders: order_id 是这个表的主键.book_id 是 Books 表的外键. 问题你需要写一段 SQL 命令,筛选 ...
- 从零开始入门 K8s | 理解 CNI 和 CNI 插件
作者 | 溪恒 阿里巴巴高级技术专家 本文整理自<CNCF x Alibaba 云原生技术公开课>第 26 讲,点击直达课程页面. 关注"阿里巴巴云原生"公众号,回复关 ...
- dotnet 写一个支持层层继承属性的对象
我最近在造一个比 Excel 差得多的表格控件,其中一个需求是属性的继承.大家都知道,表格里面有单元格,单元格里面允许放文本,文本可以放多段文本.本文的主角就是文本段落的样式属性,包括文本字体字号颜色 ...
- kali 安装完不能使用 root 账户登录图形化界面(一直报错)
kali 安装完不能使用 root 账户登录图形化界面 在普通账户界面,先设置 root 账户密码:sudo passwd root 切换 root 账户登录:su root vim /etc/pam ...