Spring Validation参数校验
Validation
Validation是Spring提供的一个参数校验框架,使用预定义的注解完成参数校验
使用步骤
- 引入Spring Validation起步依赖
- 在需要校验的参数所在的类上添加@Validated注解
- 在需要校验的参数前面加上@Pattern注解
<!--参数校验依赖--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-validation</artifactId></dependency>
引入起步依赖后要刷新maven
//值不能为null
@NotNull//值不能为null,并且内容不为空
@NotEmpety//满足邮箱格式
@Email//验证传递数据是不是URL
@URL
Validation校验失败,异常处理
使用全局异常处理器
由于各个接口需要校验的条件不同,则需要使用分组校验
分组校验:把校验项归类分组,在完成不同的功能时,校验可以指定组中的校验项
实施步骤
- 定义分组
- 在实体类部定义接口,一个接口表示一个分组
- 定义校验时 指定归属的分组
- 在校验项中,通过给groups赋值,指定校验项的分组
- groups是一个数组,同一个校验项 可以指定 多个分组
- 校验时 指定要校验的分组
- 通过给@Validated注解的value属性赋值指定校验分组
@Validated
public class Category {//@NotNull表示不能不传//@NotEmpty表示必须传,传的字符串还不能是空字符串//定义校验时指定归属的分组//属于Update组@NotNull(groups = Update.class)private Integer id;@NotEmpty//属于default分组,(groups = {Update.class, Add.class})private String categoryName;//分类名称//如果说某个校验项没有指定分组,默认属于default分租//分组之间可以继承,A extends B 那么A中拥有B中所有的校验项//定义分组校验//add校验组public interface Add extends Default {}//Update校验组public interface Update extends Default{}
}
自定义校验
已有的注解不能满足所有的校验需求,特殊的情况需要自定义校验(自定义校验注解)
- 自定义注解State
- 自定义校验数据的类StateValidation,实现ConstraintValidator接口
- 在需要校验的地方使用自定义注解
//自定义validation注解@Documented//元注解,标识State//元注解,用来标识这个State注解可以用在那些地方,类、属性、方法
@Target({FIELD})//元注解,标识State注解会在哪个阶段保留,编译、源码阶段、运行时阶段
@Retention(RetentionPolicy.RUNTIME)//指定谁给注解提供校验规则,校验的类还未定义好,因此{}里为空
//指定提供校验规则的类StateValidation.class
@Constraint(validatedBy = {StateValidation.class})public @interface State {//提供校验失败时的提示信息String message() default "校验失败";//指定分组Class<?>[] groups() default {};//负载,获取到State注解的附加信息Class<? extends Payload>[] payload() default {};
}
自定义校验数据的类StateValidation
//ConstraintValidator<给哪个注解提供校验规则,校验的数据类型>
public class StateValidation implements ConstraintValidator<State,String> {/*** @param value 将来要校验的数据* @param constraintValidatorContext* @return false:校验不通过,true:校验通过*/@Overridepublic boolean isValid(String value, ConstraintValidatorContext constraintValidatorContext) {//提供校验规则if (value==null){return false;}if (value.equals("已发布")||value.equals("草稿")) {return true;}return false;}
}
dto校验也不错
相关文章:
Spring Validation参数校验
Validation Validation是Spring提供的一个参数校验框架,使用预定义的注解完成参数校验 使用步骤 引入Spring Validation起步依赖在需要校验的参数所在的类上添加Validated注解在需要校验的参数前面加上Pattern注解 <!--参数校验依赖--><dependency>&l…...
高斯数据库Postgresql死锁和锁表解决方法
解决死锁进方法: 查询死锁进程列表 select * from pg_stat_activity where waiting‘t’ 发现有好几条挂起的记录,记录下所有或需要解锁的pid 解决死锁进程 select pg_cancel_backend(‘pid值’) 解决完后,刷新后测试,恢复正…...
【设计模式】模板方法模式 在java中的应用
设计模式: 设计模式是对软件设计中普遍存在(反复出现)的各种问题,所提出的解决方案。这个术语是由Erich Gamma等人在1995年的书《设计模式:可复用面向对象软件的基础》中首次引入的。设计模式可以加快开发过程&#x…...
PVE纵览-安装系统卡“Loading Driver”的快速解决方案
PVE纵览-安装系统卡“Loading Driver”的快速解决方案 文章目录 PVE纵览-安装系统卡“Loading Driver”的快速解决方案摘要通过引导参数解决PVE安装卡在“Loading Driver”问题官方解决方法 关键字: PVE、 显卡、 Loading、 Driver、 nomodeset 摘要 在虚拟机…...
Lua资料
Lua脚本语言 cheet sheet Lua & c Lua与C API交互全面解析 Lua语言:和C语言的交互 Lua进阶用法之Lua和C的接口设计 Lua C API 简介 C和Lua之间的相互调用 深入Lua:用户数据userdata 基本数据类型 之 UserData calling-lua-from-c/ Embedding Lua i…...
【C语言】值传递和地址传递
值传递 引用传递(传地址,传引用)的区别 传值,是把实参的值赋值给行参 ,那么对行参的修改,不会影响实参的值。 传地址,是传值的一种特殊方式,只是他传递的是地址,不是普通…...
PyTorch 中使用自动求导计算梯度
使用 PyTorch 进行自动求导和梯度计算 在 PyTorch 中,张量的 requires_grad 属性决定了是否需要计算该张量的梯度。设置为 True 的张量会在计算过程中记录操作,以便在调用 .backward() 方法时自动计算梯度。通过构建计算图,PyTorch 能够有效…...
Oracle Instant Client 23.5安装配置完整教程
Oracle Instant Client 23.5安装配置完整教程 简介环境要求安装步骤1. 准备工作目录2. 下载Oracle Instant Client3. 解压Instant Client4. 安装依赖包5. 配置系统环境5.1 配置库文件路径5.2 配置环境变量 6. 配置Oracle钱包(可选) 验证安装常见问题解决…...
【jvm】方法区的理解
目录 1. 说明2. 方法区的演进3. 内部结构4. 作用5.内存管理 1. 说明 1.方法区用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码缓存等数据。它是各个线程共享的内存区域。2.尽管《Java虚拟机规范》中把方法区描述为堆的一个逻辑部分,但它却…...
ES-针对某个字段去重后-获取某个字段值的所有值
针对上面表的数据,现在想根据age分组,并获取每个分组后的name有哪些(去重后)。 select age, GROUP_CONCAT(DISTINCT(name)) from testtable group by age ; 结果: 如果想要增加排序: SELECT age, GROUP_CONCAT(DISTINCT name)…...
百度 2025届秋招提前批 文心一言大模型算法工程师
文章目录 个人情况一面/技术面 1h二面/技术面 1h三面/技术面 40min 个人情况 先说一下个人情况: 学校情况:211本中9硕,本硕学校都一般,本硕都是计算机科班,但研究方向并不是NLP,而是图表示学习论文情况&a…...
sglang 部署Qwen2VL7B,大模型部署,速度测试,深度学习
sglang 项目github仓库: https://github.com/sgl-project/sglang 项目说明书: https://sgl-project.github.io/start/install.html 资讯: https://github.com/sgl-project/sgl-learning-materials?tabreadme-ov-file#the-first-sglang…...
fastadmin操作数据库字段为json、查询遍历each、多级下拉、union、php密码设置、common常用函数的使用小技巧
数据库中遇到的操作 查询字段是json的某个值 //获取数据库中某个字段是json中得某个值,进行查询,goods是表中字段,brand_id是json中要查詢的字段。//数据类型一定要对应要不然查询不出来。$map[json_extract(goods, "$.brand_id")]…...
UniApp在Vue3的setup语法糖下自定义组件插槽详解
UniApp在 Vue3的 setup 语法糖下自定义组件插槽详解 UniApp 是一个基于 Vue.js 的跨平台开发框架,可以用来开发微信小程序、H5、App 等多种平台的应用。Vue 3 引入了 <script setup> 语法糖,使得组件的编写更加简洁和直观。本文将详细介绍如何在 …...
springboot上传下载文件
RequestMapping(“bigJson”) RestController Slf4j public class TestBigJsonController { Resource private BigjsonService bigjsonService;PostMapping("uploadJsonFile") public ResponseResult<Long> uploadJsonFile(RequestParam("file")Mul…...
Python学习从0到1 day29 Python 高阶技巧 ⑦ 正则表达式
目录 一、正则表达式 二、正则表达式的三个基础方法 1.match 从头匹配 2.search(匹配规则,被匹配字符串) 3.findall(匹配规则,被匹配字符串) 三、元字符匹配 单字符匹配: 注: 示例&a…...
机器学习-web scraping
Web Scraping,通常称为网络抓取或数据抓取,是一种通过自动化程序从网页中提取数据的技术。以下是对Web Scraping的详细解释: 一、定义与原理 Web Scraping是指采用技术手段从大量网页中提取结构化和非结构化信息,并按照一定的规…...
移远通信5G RedCap模组RG255C-CN通过中国电信5G Inside终端生态认证
近日,移远通信5G RedCap模组RG255C-CN荣获中国电信颁发的5G Inside终端生态认证证书。这表明,该产品在5G基本性能、网络兼容性、安全特性等方面已经过严格评测且表现优异,将进一步加速推动5G行业终端规模化应用。 中国电信5G Inside终端生态认…...
Javaweb梳理17——HTMLCSS简介
Javaweb梳理17——HTML&CSS简介 17 HTML&CSS简介17.1 HTML介绍17.2 快速入门17.3 基础标签17.3 .1 标题标签17.3.2 hr标签17.3.3 字体标签17.3.4 换行17.3.8 案例17.3.9 图片、音频、视频标签17.3.10 超链接标签17.3.11 列表标签17.3.12 表格标签17.3.11 布局标签17.3.…...
【Android、IOS、Flutter、鸿蒙、ReactNative 】自定义View
Android Java 自定义View 步骤 创建一个新的Java类,继承自View、ViewGroup或其他任何一个视图类。 如果需要,重写构造函数以支持不同的初始化方式。 重写onMeasure方法以提供正确的测量逻辑。 重写onDraw方法以实现绘制逻辑。 根据需要重写其他方法&…...
基于距离变化能量开销动态调整的WSN低功耗拓扑控制开销算法matlab仿真
目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.算法仿真参数 5.算法理论概述 6.参考文献 7.完整程序 1.程序功能描述 通过动态调整节点通信的能量开销,平衡网络负载,延长WSN生命周期。具体通过建立基于距离的能量消耗模型&am…...
React Native 导航系统实战(React Navigation)
导航系统实战(React Navigation) React Navigation 是 React Native 应用中最常用的导航库之一,它提供了多种导航模式,如堆栈导航(Stack Navigator)、标签导航(Tab Navigator)和抽屉…...
镜像里切换为普通用户
如果你登录远程虚拟机默认就是 root 用户,但你不希望用 root 权限运行 ns-3(这是对的,ns3 工具会拒绝 root),你可以按以下方法创建一个 非 root 用户账号 并切换到它运行 ns-3。 一次性解决方案:创建非 roo…...
全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...
Mobile ALOHA全身模仿学习
一、题目 Mobile ALOHA:通过低成本全身远程操作学习双手移动操作 传统模仿学习(Imitation Learning)缺点:聚焦与桌面操作,缺乏通用任务所需的移动性和灵活性 本论文优点:(1)在ALOHA…...
Java线上CPU飙高问题排查全指南
一、引言 在Java应用的线上运行环境中,CPU飙高是一个常见且棘手的性能问题。当系统出现CPU飙高时,通常会导致应用响应缓慢,甚至服务不可用,严重影响用户体验和业务运行。因此,掌握一套科学有效的CPU飙高问题排查方法&…...
LLMs 系列实操科普(1)
写在前面: 本期内容我们继续 Andrej Karpathy 的《How I use LLMs》讲座内容,原视频时长 ~130 分钟,以实操演示主流的一些 LLMs 的使用,由于涉及到实操,实际上并不适合以文字整理,但还是决定尽量整理一份笔…...
RSS 2025|从说明书学习复杂机器人操作任务:NUS邵林团队提出全新机器人装配技能学习框架Manual2Skill
视觉语言模型(Vision-Language Models, VLMs),为真实环境中的机器人操作任务提供了极具潜力的解决方案。 尽管 VLMs 取得了显著进展,机器人仍难以胜任复杂的长时程任务(如家具装配),主要受限于人…...
【JavaSE】多线程基础学习笔记
多线程基础 -线程相关概念 程序(Program) 是为完成特定任务、用某种语言编写的一组指令的集合简单的说:就是我们写的代码 进程 进程是指运行中的程序,比如我们使用QQ,就启动了一个进程,操作系统就会为该进程分配内存…...
探索Selenium:自动化测试的神奇钥匙
目录 一、Selenium 是什么1.1 定义与概念1.2 发展历程1.3 功能概述 二、Selenium 工作原理剖析2.1 架构组成2.2 工作流程2.3 通信机制 三、Selenium 的优势3.1 跨浏览器与平台支持3.2 丰富的语言支持3.3 强大的社区支持 四、Selenium 的应用场景4.1 Web 应用自动化测试4.2 数据…...
