spring-boot-starter-validation是什么Validation参数校验使用概要

spring-boot-starter-validation是什么&Validation参数校验使用概要

      • 来源
      • @Valid和@Validated的用法(区别)
      • 引入依赖
      • @Valid和@Validated的用法

在日常的项目开发中,为了防止非法参数对业务造成的影响,需要对接口的参数做合法性校验,例如在创建用户时,需要效验用户的账号名称不能输入中文与特殊字符,手机号、邮箱格式是否准确。按照原始的处理逻辑需要对每个接口中的参数进行 if/else 处理,如果这样开发,后期代码难以维护,可读性极差。

为了解决上述问题,validation框架诞生了,代码量大大减少,参数的效验不再穿插业务逻辑代码中,代码美观又易于维护。

来源

@Valid 是 JSR303 声明的,JSR是Java Specification Requests的缩写,其中 JSR303 是JAVA EE 6 中的一项子规范,叫做 Bean Validation,为 JavaBean 验证定义了相应的元数据模型和 API,需要注意的是,JSR 只是一项标准,它规定了一些校验注解的规范,但没有实现,

而 Hibernate validation 对其进行实现。

Spring Validation 验证框架对参数的验证机制提供了@Validated(Spring JSR-303规范,是标准JSR-303的一个变种)。

@Valid和@Validated的用法(区别)

二者主要作用在于 都作为标准JSR-303规范,在检验Controller的入参是否符合规范时,使用@Validated或者@Valid在基本验证功能上没有太多区别。
但是在分组、注解地方、嵌套验证等功能上两个有所不同:
在这里插入图片描述

@Valid:
@Valid注解用于校验,所属包为:javax.validation.Valid。

用在方法入参上无法单独提供嵌套验证功能。能够用在成员属性(字段)上,提示验证框架进行嵌套验证。能配合嵌套验证注解@Valid进行嵌套验证。

@Validated:
@Validated是@Valid 的一次封装,是Spring提供的校验机制使用

用在方法入参上无法单独提供嵌套验证功能。不能用在成员属性(字段)上,也无法提示框架进行嵌套验证。能配合嵌套验证注解@Valid进行嵌套验证。

关于@Valid和@Validated的使用,可以参考我另一篇文章!

引入依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <version>2.3.12.RELEASE</version>
</dependency>

<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.10</version>
</dependency>

注:从 boot-2.3.x开始,spring-boot-starter-web不再引入 spring-boot-starter-validation,所以需要额外手动引入validation依赖,而 2.3之前的版本只需要引入 web 依赖。

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-validation</artifactId>
	<version>2.3.12.RELEASE</version>
</dependency>
    
<!-- <dependency>
	<groupId>org.hibernate.validator</groupId>
	<artifactId>hibernate-validator</artifactId>
	<version>6.0.18.Final</version>
	<scope>compile</scope>
</dependency>-->

以上两个依赖都是可以实现功能的。hibernate-validator、spring-boot-starter-validation底层都引入了 jakarta.validation-api依赖。

@Valid和@Validated的用法

由于之前专门写过这方面博文,所以 在此就不重复!

点击跳转我另一篇文章–【优雅的参数验证@Validated】@Validated参数校验的使用及注解详解——你还在用if做条件验证?

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/230894.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

京东数据运营:京东API接口有哪些?京东数据如何采集调用?

市场分析对于电商品牌来说非常重要&#xff0c;它可以帮助电商品牌更好地理解市场&#xff0c;把握市场机会&#xff0c;以及制定有效的产品定价、产品营销策略等等。 结合市场中可以帮助品牌方做市场分析的电商数据分析工具——鲸参谋电商数据分析平台&#xff0c;我们一起具体…

快邀请你的冤种朋友一起来学习顺序表的底层逻辑:ArrayList集合

进来了就一起来学习如何去使用ArrayList这个集合吧&#xff01; 目录 一.ArrayList是什么 二.ArrayList的构造方法与扩容机制 1.无参构造方法与扩容机制 2.带参数的构造方法 3.利用其他 Collection 构建 ArrayList 三.ArrayList常用方法介绍 1.插入数据方法 2.boolean …

react-photo-view 的介绍、安装、使用。

目录 基本介绍 安装 使用 基本介绍 react-photo-view 是一个基于 React 的图片查看器组件&#xff0c;用于在网页上展示和浏览图片。该组件提供了用户友好的界面和交互&#xff0c;可以轻松地在应用程序中集成并使用。 支持触摸手势&#xff0c;拖动/平移/物理效果滑动…

【vtkWidgetRepresentation】第七期 vtkImplicitPlaneRepresentation

很高兴在雪易的CSDN遇见你 前言 本文分享vtkImplicitPlaneRepresentation源码剖析&#xff0c;及相关的实例&#xff0c;该接口主要用于切割交互&#xff0c;希望对各位小伙伴有所帮助&#xff01; 感谢各位小伙伴的点赞关注&#xff0c;小易会继续努力分享&#xff0c;一起…

利用lammps模拟不同压头半径对单晶铝纳米压痕的影响

2.1.问题描述 纳米压痕是确定金属材料特性的最广泛使用的方法之一。分子动力学&#xff08;MD&#xff09;模拟是一种强大的工具&#xff0c;可以研究纳米压痕过程中原子尺度上的材料行为&#xff0c;并深入了解材料的塑性变形。本工作采用单晶铝作为原材料&#xff0c;旨在为…

虾皮免费分析工具:了解市场趋势、优化产品和店铺运营

在如今竞争激烈的电商市场中&#xff0c;了解市场趋势、优化产品和店铺运营对于卖家来说至关重要。虾皮&#xff08;Shopee&#xff09;作为一家知名的电商平台&#xff0c;为卖家提供了一些免费的分析工具&#xff0c;帮助他们更好地了解市场情况并做出明智的决策。本文将介绍…

人工智能教程(三):更多有用的 Python 库

目录 前言 推荐 JupyterLab 入门 复杂的矩阵运算 其它人工智能和机器学习的 Python 库 前言 在本系列的上一篇人工智能教程&#xff08;二&#xff09;&#xff1a;人工智能的历史以及再探矩阵中&#xff0c;我们回顾了人工智能的历史&#xff0c;然后详细地讨论了矩阵。在…

导入PR的视频画面是黑屏的怎么办?

在现代视频编辑领域中&#xff0c;越来越多的人使用Adobe Premiere Pro来编辑和制作视频&#xff0c;但是在某些情况下&#xff0c;用户可能需要透明背景的视频进行创作&#xff0c;那么如何创作透明背景的视频呢&#xff1f; 要制作具有透明背景的视频&#xff0c;我们需要使…

深度探索Linux操作系统 —— 构建initramfs

系列文章目录 深度探索Linux操作系统 —— 编译过程分析 深度探索Linux操作系统 —— 构建工具链 深度探索Linux操作系统 —— 构建内核 深度探索Linux操作系统 —— 构建initramfs 文章目录 系列文章目录前言一、为什么需要 initramfs二、initramfs原理探讨三、构建基本的init…

在Windows 11中,至少有四种方法可以创建用户

本文介绍如何在Windows11上添加另一个用户(或多个用户)。 使用设置添加其他用户 这是创建新用户的“正常”方式。这是一个简单的过程,允许你添加Microsoft、本地或家庭帐户。 添加Microsoft或本地帐户 按照以下步骤将Microsoft帐户添加到Windows 11或创建新的本地用户。…

论文阅读:PointCLIP: Point Cloud Understanding by CLIP

CVPR2022 链接&#xff1a;https://arxiv.org/pdf/2112.02413.pdf 0、Abstract 最近&#xff0c;通过对比视觉语言预训练(CLIP)的零镜头学习和少镜头学习在2D视觉识别方面表现出了鼓舞人心的表现&#xff0c;即学习在开放词汇设置下将图像与相应的文本匹配。然而&#xff0c;…

实现手机扫码——扫描识别路由器参数

有个应用是批量自动检测无线路由器&#xff0c;检测前需要自动登录路由器的管理界面进行设置&#xff0c;如设置wifi参数、连接模式&#xff0c;或者恢复出厂设置等。进入管理界面的登录用户名是admin&#xff0c;密码则各不相同。此外也需要知道路由器的MAC地址&#xff0c;因…

Qt基础-程序打包发布方法

本文讲解Qt程序打包发布方法。 一、使用Qt自带的windeployqt 生成可运行的包 准备将Qt生成的exe拷入到单独的文件夹,并进行命名,本文命名为packDemorun,并将文件放到D盘(自己随意放置) 1、找到Qt自带的命令终端 2、启动命令终端 3、输入:cd /d D:\packDemorun,进入文…

质量工程化,交付快速化

质量和速度之间权衡让人很难取舍&#xff0c;而通过推进质量工程&#xff0c;以系统化的方式识别和优化系统痛点&#xff0c;可以帮助团队构建既快又好的精益软件生产系统。原文: Quality Engineered, Speed Delivered 所有人都想要更快的速度。 但需要解决复杂问题: 权衡质量会…

小程序时代的机遇:开发成功的知识付费平台

知识付费平台不仅为知识创作者提供了广阔的变现渠道&#xff0c;同时也为用户提供了更为个性化、精准的学习体验。本篇文章&#xff0c;小编将为大家讲解知识付费小程序开发相关的知识。 一、小程序时代的背景 知识付费作为小程序领域中的“大热门”&#xff0c;有着非常高的…

整数在内存中的存储

整数和浮点数在内存中的存储方式是不一样的&#xff0c;今天&#xff0c;我们来具体学习一下 文章目录 整数在内存中的存储浮点数在内存中的存储 整数在内存中的存储 我们在之前就已经了解过了整数有原码&#xff0c;反码&#xff0c;补码的形式&#xff0c;这三种方式都是二进…

springboot 集成Dubbo2.7.8 ,连接zookeeper 提示错误 zookeeper not connected

Dubbo 连接zookeeper时&#xff0c;提示“zookeeper not connected” java.lang.IllegalStateException: zookeeper not connectedat org.apache.dubbo.remoting.zookeeper.curator.CuratorZookeeperClient.<init>(CuratorZookeeperClient.java:83) ~[dubbo-2.7.8.jar:2.…

【每周一测】Java阶段四第二周学习

目录 1、在MyBatis中&#xff0c;当实体类中的属性名和表中的字段名不一样&#xff0c;除了&#xff08; &#xff09;都可以实现属性和数据的映射。 2、下列数组定义及赋值&#xff0c;错误的是&#xff08; &#xff09; 3、关于会话跟踪以下说法错误的&#xff08; &…

C++ Qt开发:Qt的安装与配置

Qt是一种C编程框架&#xff0c;用于构建图形用户界面&#xff08;GUI&#xff09;应用程序和嵌入式系统。Qt由Qt公司&#xff08;前身为Nokia&#xff09;开发&#xff0c;提供了一套跨平台的工具和类库&#xff0c;使开发者能够轻松地创建高效、美观、可扩展的应用程序。其被广…

多线程(进阶一:锁策略)

一、乐观锁和悲观锁 二、轻量级锁和重量级锁 三、自旋锁和挂起等待锁 四、普通互斥锁和读写锁 五、公平锁和非公平锁 六、可重入锁和不可重入锁 七、synchronized和Linux的mutex锁的简单比较 八、synchronized的自适应 一、乐观锁和悲观锁 乐观锁&#xff1a;在加锁之前…
最新文章