当前位置: 首页 > news >正文

Spring Validation参数校验

Validation

Validation是Spring提供的一个参数校验框架,使用预定义的注解完成参数校验


使用步骤

  1. 引入Spring Validation起步依赖
  2. 在需要校验的参数所在的类上添加@Validated注解
  3. 在需要校验的参数前面加上@Pattern注解
    <!--参数校验依赖--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-validation</artifactId></dependency>

引入起步依赖后要刷新maven

//值不能为null
@NotNull//值不能为null,并且内容不为空
@NotEmpety//满足邮箱格式
@Email//验证传递数据是不是URL
@URL

Validation校验失败,异常处理

使用全局异常处理器

由于各个接口需要校验的条件不同,则需要使用分组校验

分组校验:把校验项归类分组,在完成不同的功能时,校验可以指定组中的校验项

实施步骤

  1. 定义分组
    1. 在实体类部定义接口,一个接口表示一个分组
  2. 定义校验时 指定归属的分组
    1. 在校验项中,通过给groups赋值,指定校验项的分组
    2. groups是一个数组,同一个校验项 可以指定 多个分组
  3. 校验时 指定要校验的分组
    1. 通过给@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{}
}

自定义校验

已有的注解不能满足所有的校验需求,特殊的情况需要自定义校验(自定义校验注解)

  1. 自定义注解State 
  2. 自定义校验数据的类StateValidation,实现ConstraintValidator接口
  3. 在需要校验的地方使用自定义注解
//自定义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提供的一个参数校验框架&#xff0c;使用预定义的注解完成参数校验 使用步骤 引入Spring Validation起步依赖在需要校验的参数所在的类上添加Validated注解在需要校验的参数前面加上Pattern注解 <!--参数校验依赖--><dependency>&l…...

高斯数据库Postgresql死锁和锁表解决方法

解决死锁进方法&#xff1a; 查询死锁进程列表 select * from pg_stat_activity where waiting‘t’ 发现有好几条挂起的记录&#xff0c;记录下所有或需要解锁的pid 解决死锁进程 select pg_cancel_backend(‘pid值’) 解决完后&#xff0c;刷新后测试&#xff0c;恢复正…...

【设计模式】模板方法模式 在java中的应用

设计模式&#xff1a; 设计模式是对软件设计中普遍存在&#xff08;反复出现&#xff09;的各种问题&#xff0c;所提出的解决方案。这个术语是由Erich Gamma等人在1995年的书《设计模式&#xff1a;可复用面向对象软件的基础》中首次引入的。设计模式可以加快开发过程&#x…...

PVE纵览-安装系统卡“Loading Driver”的快速解决方案

PVE纵览-安装系统卡“Loading Driver”的快速解决方案 文章目录 PVE纵览-安装系统卡“Loading Driver”的快速解决方案摘要通过引导参数解决PVE安装卡在“Loading Driver”问题官方解决方法 关键字&#xff1a; PVE、 显卡、 Loading、 Driver、 nomodeset 摘要 在虚拟机…...

Lua资料

Lua脚本语言 cheet sheet Lua & c Lua与C API交互全面解析 Lua语言&#xff1a;和C语言的交互 Lua进阶用法之Lua和C的接口设计 Lua C API 简介 C和Lua之间的相互调用 深入Lua&#xff1a;用户数据userdata 基本数据类型 之 UserData calling-lua-from-c/ Embedding Lua i…...

【C语言】值传递和地址传递

值传递 引用传递&#xff08;传地址&#xff0c;传引用&#xff09;的区别 传值&#xff0c;是把实参的值赋值给行参 &#xff0c;那么对行参的修改&#xff0c;不会影响实参的值。 传地址&#xff0c;是传值的一种特殊方式&#xff0c;只是他传递的是地址&#xff0c;不是普通…...

PyTorch 中使用自动求导计算梯度

使用 PyTorch 进行自动求导和梯度计算 在 PyTorch 中&#xff0c;张量的 requires_grad 属性决定了是否需要计算该张量的梯度。设置为 True 的张量会在计算过程中记录操作&#xff0c;以便在调用 .backward() 方法时自动计算梯度。通过构建计算图&#xff0c;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钱包&#xff08;可选&#xff09; 验证安装常见问题解决…...

【jvm】方法区的理解

目录 1. 说明2. 方法区的演进3. 内部结构4. 作用5.内存管理 1. 说明 1.方法区用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码缓存等数据。它是各个线程共享的内存区域。2.尽管《Java虚拟机规范》中把方法区描述为堆的一个逻辑部分&#xff0c;但它却…...

ES-针对某个字段去重后-获取某个字段值的所有值

针对上面表的数据&#xff0c;现在想根据age分组&#xff0c;并获取每个分组后的name有哪些(去重后)。 select age, GROUP_CONCAT(DISTINCT(name)) from testtable group by age ; 结果&#xff1a; 如果想要增加排序&#xff1a; SELECT age, GROUP_CONCAT(DISTINCT name)…...

百度 2025届秋招提前批 文心一言大模型算法工程师

文章目录 个人情况一面/技术面 1h二面/技术面 1h三面/技术面 40min 个人情况 先说一下个人情况&#xff1a; 学校情况&#xff1a;211本中9硕&#xff0c;本硕学校都一般&#xff0c;本硕都是计算机科班&#xff0c;但研究方向并不是NLP&#xff0c;而是图表示学习论文情况&a…...

sglang 部署Qwen2VL7B,大模型部署,速度测试,深度学习

sglang 项目github仓库&#xff1a; https://github.com/sgl-project/sglang 项目说明书&#xff1a; https://sgl-project.github.io/start/install.html 资讯&#xff1a; https://github.com/sgl-project/sgl-learning-materials?tabreadme-ov-file#the-first-sglang…...

fastadmin操作数据库字段为json、查询遍历each、多级下拉、union、php密码设置、common常用函数的使用小技巧

数据库中遇到的操作 查询字段是json的某个值 //获取数据库中某个字段是json中得某个值&#xff0c;进行查询&#xff0c;goods是表中字段&#xff0c;brand_id是json中要查詢的字段。//数据类型一定要对应要不然查询不出来。$map[json_extract(goods, "$.brand_id")]…...

UniApp在Vue3的setup语法糖下自定义组件插槽详解

UniApp在 Vue3的 setup 语法糖下自定义组件插槽详解 UniApp 是一个基于 Vue.js 的跨平台开发框架&#xff0c;可以用来开发微信小程序、H5、App 等多种平台的应用。Vue 3 引入了 <script setup> 语法糖&#xff0c;使得组件的编写更加简洁和直观。本文将详细介绍如何在 …...

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&#xff08;匹配规则&#xff0c;被匹配字符串&#xff09; 3.findall&#xff08;匹配规则&#xff0c;被匹配字符串&#xff09; 三、元字符匹配 单字符匹配&#xff1a; 注&#xff1a; 示例&a…...

机器学习-web scraping

Web Scraping&#xff0c;通常称为网络抓取或数据抓取&#xff0c;是一种通过自动化程序从网页中提取数据的技术。以下是对Web Scraping的详细解释&#xff1a; 一、定义与原理 Web Scraping是指采用技术手段从大量网页中提取结构化和非结构化信息&#xff0c;并按照一定的规…...

移远通信5G RedCap模组RG255C-CN通过中国电信5G Inside终端生态认证

近日&#xff0c;移远通信5G RedCap模组RG255C-CN荣获中国电信颁发的5G Inside终端生态认证证书。这表明&#xff0c;该产品在5G基本性能、网络兼容性、安全特性等方面已经过严格评测且表现优异&#xff0c;将进一步加速推动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类&#xff0c;继承自View、ViewGroup或其他任何一个视图类。 如果需要&#xff0c;重写构造函数以支持不同的初始化方式。 重写onMeasure方法以提供正确的测量逻辑。 重写onDraw方法以实现绘制逻辑。 根据需要重写其他方法&…...

如何让Windows 11界面更顺手:ExplorerPatcher完整配置指南

如何让Windows 11界面更顺手&#xff1a;ExplorerPatcher完整配置指南 【免费下载链接】ExplorerPatcher This project aims to enhance the working environment on Windows 项目地址: https://gitcode.com/GitHub_Trending/ex/ExplorerPatcher 还在为Windows 11的新界…...

娱乐圈天降紫微星终结乱象,海棠山铁哥终结资源咖霸屏时代

资源咖的丧钟&#xff0c;已鸣。 草根王的号角&#xff0c;已响。一、旧秩序罪状书固化霸权三宗罪现场速写1. 资源垄断霸占赛道、包揽曝光、红利通吃2. 圈层护城出身即顶流&#xff0c;背景即通行证3. 劣币驱逐流水线泛滥&#xff0c;原创被碾压&#xff0c;审美被带偏 “无资源…...

从数学抽象到物理连接:Simscape物理网络建模的核心思想

1. 当信号流遇到物理网络&#xff1a;思维模式的碰撞 第一次打开Simscape工具箱时&#xff0c;我盯着那些陌生的元件库发了十分钟呆。作为有五年Simulink建模经验的工程师&#xff0c;我习惯性地开始寻找"输入端口"和"输出端口"&#xff0c;却发现Simscape…...

别再让UDP丢包坑了你!手把手教你用C语言实现应用层分包组包(附完整代码)

从零构建高可靠UDP传输&#xff1a;C语言实现应用层分包组包实战指南 在实时音视频、在线游戏等对延迟极度敏感的领域&#xff0c;UDP协议因其无连接、低开销的特性成为首选。但许多开发者第一次使用UDP发送大文件时都会遇到这样的场景&#xff1a;明明局域网测试一切正常&…...

高版本MATLAB机器人工具箱plot/teach视图兼容性修复实战

1. 问题现象与背景分析 最近在MATLAB 2019b上使用机器人工具箱&#xff08;Robotics Toolbox&#xff09;时遇到了一个奇怪的问题。当我像往常一样调用robot.plot()或者robot.teach()函数时&#xff0c;控制台突然报错&#xff1a;"索引超出数组元素数目(4)"。这个错…...

终极指南:3分钟掌握Typora插件,让写作效率提升300%

终极指南&#xff1a;3分钟掌握Typora插件&#xff0c;让写作效率提升300% 【免费下载链接】typora_plugin Typora plugin. Feature enhancement tool | Typora 插件&#xff0c;功能增强工具 项目地址: https://gitcode.com/gh_mirrors/ty/typora_plugin Typora是一款广…...

开源AI智能体记忆服务:构建持久化共享记忆中枢

1. 项目概述&#xff1a;为AI智能体构建持久化共享记忆中枢 如果你正在构建或使用基于LangGraph、CrewAI、AutoGen这类框架的多智能体系统&#xff0c;或者你厌倦了每次与Claude、Cursor等AI助手开启新会话时都要重复解释项目背景&#xff0c;那么你很可能正面临一个核心痛点&…...

【冷链配送】遗传算法求解低碳冷链物流车辆路径问题(目标函数固定成本 运输成本 制冷成本 惩罚成本 总碳排放成本)【含Matlab源码 15428期】

&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;Matlab领域博客之家&#x1f49e;&…...

Go语言代理池框架clawproxy:构建高可用免费代理池的实践指南

1. 项目概述&#xff1a;一个面向开发者的轻量级代理抓取与验证框架 最近在折腾一些需要处理大量公开代理IP的应用场景&#xff0c;比如数据采集、API轮询测试或者简单的负载均衡模拟&#xff0c;你是不是也经常遇到这样的问题&#xff1a;网上找的免费代理列表&#xff0c;十个…...

打造高效愉悦的开发环境:从工具选型到实战配置全指南

1. 项目概述与核心价值最近在整理自己的开发工具箱时&#xff0c;发现了一个非常有意思的GitHub仓库&#xff0c;叫做awesome-vibe-coding-tools。这个标题本身就充满了吸引力——“Awesome”系列通常意味着精选和高质量&#xff0c;“Vibe”这个词则暗示着一种氛围、感觉或体验…...