首页 > 编程语言 >dubbo~javax.validation和jakarta.validation的介绍与排雷

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

时间:2024-05-30 10:14:48浏览次数:23  
标签:dubbo hibernate Java 验证 jakarta validation javax

javax.validationjakarta.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.validationjavax.validation具有相同的功能和API,但包名不同,属于Jakarta EE规范的一部分。
  • 随着Java EE的发展,未来新的版本可能会使用jakarta.validation作为默认的数据验证API。

作用:

  • 数据验证:通过注解和验证器,对Java对象的属性进行验证,确保数据符合指定的约束条件。
  • 提高数据质量:有效地防止无效数据进入系统,提高数据的准确性和完整性。
  • 简化开发:通过标准化的验证框架,简化数据验证逻辑的编写和维护工作。

总的来说,javax.validationjakarta.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,hibernate,Java,验证,jakarta,validation,javax
From: https://www.cnblogs.com/lori/p/18221808

相关文章

  • Jakarta Bean Validation 规范介绍及其API使用以及与Spring Validator之间的关系
    JakartaBeanValidation规范1.BeanValidation的前世今生BeanValidation规范最早在OracleJavaEE下维护。2017年11月,Oracle将JavaEE移交给Eclipse基金会。2018年3月5日,Eclipse基金会宣布JavaEE(EnterpriseEdition)被更名为JakartaEE。随着JSR-303......
  • SpringValidation
    一、概述:​JSR303中提出了BeanValidation,表示JavaBean的校验,HibernateValidation是其具体实现,并对其进行了一些扩展,添加了一些实用的自定义校验注解。​Spring中集成了这些内容,你可以在Spring中以原生的手段来使用校验功能,当然Spring也对其进行了一点简单的扩展,以便其更适......
  • Dubbo阅读源码记录
    1.Protocal:默认dubbo协议,默认端口208802.zk作为注册中心,创建接口下的consumer/provider/configurator/router节点是持久话节点。此四个节点下的节点是临时节点,会话心跳检测不到节点信息,就会自动删除3.@enabledubbo:扫描@service和@reference注解4.dubbo重试次数可以通过xm......
  • 微服务:构建Spring Boot与Dubbo集成:以Nacos为注册中心
    一、前言  Dubbo是阿里巴巴公司开源的一个高性能、轻量级的JavaRPC框架,用于构建分布式服务架构。Dubbo提供了三大核心能力:面向接口的远程方法调用、智能容错和负载均衡,以及服务自动注册和发现。二、Dubbo的特点  面向接口代理的高性能RPC调用:提供高性能的基于代理的......
  • springcloud和dubbo分别调用controller层和service层是两种微服务架构的最大区别?
    许多讨论微服务架构中springcloud和dubbo区别的文章中,主要强调dubbo只是springcloud的子集,只是服务治理工具,不是完整解决方案。但是看了一下两者,感觉完全无法兼容,理念完全不同啊。springboot开发的典型应用目录如下:分Controller、service接口、Serviceimpl实现、dao等层次。1、s......
  • Java基于saas模式云MES制造执行系统源码Spring Boot + Hibernate Validation什么是MES
    Java基于saas模式云MES制造执行系统源码SpringBoot+HibernateValidation什么是MES系统?MES制造执行系统,通过互联网技术实现从订单下达到产品完成的整个生产过程进行优化管理。能有效地对生产现场的流程进行智能控制,防错防呆防漏,自动化集成各种制造信息,使管理者准确掌控工......
  • 【dubbo】telnet 连接dubbo不支持ls命令解决方法
    现象dubbo服务的默认端口是20880,按照网上教程想查看dubbo服务,报错telnet127.0.0.120880dubbo>lsDubboTelnetUnsupportedcommand:ls原因PleaseusethespecificQOSportforQOScommands,bydefaultis 22222从dubbo2.5.8开始,引入了QoS模块,别问我QoS啥意思,我查......
  • springboot2 - validation
    业务需求:客户端提交的表单,后台需要有统一的校验拦截机制。Maven依赖除了hibernate-validator,springboot本身自带这些依赖。<dependencys><dependency><groupId>jakarta.validation</groupId><artifactId>jakarta.validation-api</artifactId>......
  • Springboot搭建dubbo+zookeeper本地项目
    1、下载zookeeper什么是zookeeper:https://www.cnblogs.com/Bernard94/p/17495775.html下载地址:https://dlcdn.apache.org/zookeeper/zookeeper-3.7.2/下载好解压后进入conf目录下,把‘zoo_sample.cfg’复制并改名为‘zoo.cfg’:修改配置文件的日志地址,修改到自己指定位置(非必......
  • validation捕获异常
    好像需要在控制器启用校验才能捕获参数校验,即@RestController@Validated----------------------分隔符-----------------------------importjakarta.validation.ConstraintViolation;importjakarta.validation.ConstraintViolationException;importorg.springframework.......