springboot使用Validated实现参数校验

做为后端开发人员,一定有前端传的数据是可能会出错的警惕性,否则程序就可能会出错,比如常遇到的空指针异常,所以为了程序运行的健壮性,我们必须对每一个参数进行合法校验,就能避免很多不必要的错误,但如果仅仅是if-else则非常冗余且不美观,就可以使用Validated进行参数校验。Validated可以非常优雅的完成参数校验的任务,仅仅需要几个注解。

1.首先,引入Validated依赖

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-validation</artifactId>
</dependency>

2.使用Validated,使用Validated非常简单,只需要在controller接收的参数前加上 @Validated 注解就行,表示该参数需要校验。也可以在类上加上@Validated注解,表示本类中的方法开始参数校验功能,然后在需要校验的参数前加上@Valid注解,表示后面的参数需要校验。

 

然后在接收参数的实体类中配置好校验标准,如下,如果实体类属性也是一个实体类,则需要添加@Valid注解,不能添加@Validated注解,然后在去对应的实体类中添加校验属性

此时就完成了参数校验,首先@Validated会告知系统当前参数要进行校验,然后会根据校验对象里面每个属性的校验注解进行逐一的校验,如果不合法就会抛出import org.springframework.web.bind.MethodArgumentNotValidExceptio异常。

3.测试

当使用不合法的参数访问controller时,就会报错

4.统一异常处理,

可以看到报错内容非常不友好,非常长一串,此时就可以使用统一异常处理,捕获MethodArgumentNotValidException发出的异常,当然也能捕获任何异常。重启测试类后,就能获取比较直观明显简洁的报错信息了

 

5.当然,除了通过在接收参数前注解声明校验并在实体类的属性上加注解进行校验,也可以直接在方法的参数上校验,

基本类型参数或简单类型参数通常不需要使用@Valid ,适用@Valid的方法除了上面提到的一个,还有当请求体为JSON时,也需要添加@Valid

但我暂时没找到对集合比如map的键值对进行校验的方法,如有指正,万分感谢

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【高效开发工具系列】eclipse部署web项目

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

el-select绑定值的坑

碰到一个问题&#xff0c;选择框的数据是后端传过来的&#xff0c;下拉框的数据也是后端传过来的&#xff0c;但是打开下拉框时&#xff0c;发现数据没有高亮。 最后发现&#xff0c;只要选择框v-model给的值和option的value绑定的值一致&#xff0c;就可以高亮。 大多数情况下…

机器学习——分类评价指标

【说明】文章内容来自《机器学习——基于sklearn》&#xff0c;用于学习记录。若有争议联系删除。 1、评价指标 对于模型的评价往往会使用损失函数和评价指标&#xff0c;两者的本质是一致的。一般情况下&#xff0c;损失函数应用于训练过程&#xff0c;而评价指标应用于测试过…

【Xcode】解决Unable to process request - PLA Update available

出现场景 IOS更新app时&#xff0c;使用Xcode上传新版本的包时&#xff0c;提示无法上传。 Unable to process request -PLA update available you currently dont have access to this membership resource. To resolve this issue ,agree to the latest program license a…

Flutter ExpansionPanelList 去除展开后的间隔距离,及属性

可展开列表中&#xff0c;展开后条目有一个间距&#xff0c;可以 使用materialGapSize: 0&#xff0c;来去掉 // child: ExpansionPanelList(//expandedHeaderPadding: EdgeInsets.zero,//头部顶部间隔// materialGapSize: 15,//展开后的间距// animationDuration: const …

实在智能成功完成近2亿元C轮融资,全面迎接2024年Agent智能体应用元年

在这个最冷的季节&#xff0c;杭州实在智能科技有限公司&#xff08;以下简称“实在智能”&#xff09;依然表现火爆&#xff0c;近日&#xff0c;实在智能成功完成C轮融资近2亿元人民币&#xff0c;由金泰富资本和安吉智慧谷共同领投、安吉两山国创跟投。 在此轮融资以前&…

61权限提升-RedisPostgre令牌窃取进程注入

主要讲解redis数据库和postgresql数据库&#xff0c;然后还要两个windows的提权方式令牌窃取和进程注入。 postgresql是基于两个cve的漏洞&#xff0c;redis的提权方式第一种是利用任务执行的反弹shell&#xff0c;第二个是写一个ssh-keygen的公钥使用私钥登录&#xff0c;这是…

[SWPUCTF 2021 新生赛]Do_you_know_http已

打开环境 它说用WLLM浏览器打开&#xff0c;使用BP抓包&#xff0c;发送到重发器 修改User-Agent 下一步&#xff0c;访问a.php 这儿他说添加一个本地地址&#xff0c;它给了一个183.224.40.160&#xff0c;我用了发现没用&#xff0c;然后重新添加一个地址&#xff1a;X-Forwa…

QListView的setResizeMode,setViewMode,setFlow

参考&#xff1a; qt的QListwiget设置横向的排列_qlistwidget 横排-CSDN博客 希望实现类似的效果&#xff1a; 感觉关键是搞清楚这三句&#xff1a; list.setViewMode(QListView::IconMode);list.setFlow(QListView::LeftToRight);list.setResizeMode(QListView::Adjust); …

mysql自增序列 关于mysql线程安全 独享内存 溢出 分析

1 MySQL锁概述 锁是计算机协调多个进程或线程并发访问某一资源的机制。如何保证数据并发访问的一致性、有效性是所有数据库必须解决的一个问题&#xff0c;锁冲突也是影响数据库并发访问性能的一个重要因素。 相对其他数据库而言&#xff0c;MySQL的锁机制比较简单&#xff0c…

nginx 离线安装 https反向代理

这里写自定义目录标题 安装步骤1.安装nginx所需依赖1.1 安装gcc和gcc-c1.1.1下载依赖包1.1.2 上传依赖包1.1.3安装依赖 1.2 安装pcre1.2.1 下载pcre1.2.2 上传解压安装包1.2.3 编译安装 1.3 下载安装zlib1.3.1 下载zlib1.3.2 上传解压安装包1.3.3 编译安装 1.4 下载安装openssl…

STM32G4x FLASH 读写配置结构体(LL库下使用)

主要工作就是把HAL的超时用LL库延时替代&#xff0c;保留了中断擦写模式、轮询等待擦写&#xff0c;我已经验证了部分。 笔者用的芯片为STM32G473CBT6 128KB Flash&#xff0c;开环环境为CUBEMXMDK5.32&#xff0c;因为G4已经没有标准库了&#xff0c;笔者还是习惯使用标准库的…

企业招股书API,轻松获取公司招股书信息

前言 随着互联网的普及和信息技术的不断发展&#xff0c;获取公司招股书信息变得越来越便捷。企业招股书API作为一种新型的技术手段&#xff0c;为投资者提供了更加高效、准确、全面的招股书信息。本文将介绍企业招股书API的功能和优势&#xff0c;帮助投资者轻松获取公司招股…

什么是多边形网格以及如何编辑它?

在线工具推荐&#xff1a; 3D数字孪生场景编辑器 - GLTF/GLB材质纹理编辑器 - 3D模型在线转换 - Three.js AI自动纹理开发包 - YOLO 虚幻合成数据生成器 - 三维模型预览图生成器 - 3D模型语义搜索引擎 介绍 多边形网格是 3D 建模中经常使用的一个词&#xff0c;它的含义…

Ionic实战二十七:移动端录音方案及Nginx部署配置

文章目录 1.最终效果预览2.实现思路说明3.移动端外壳集成iframe4.视频页nginx配置5.组态页iframe集成6.组态页Nginx配置7.Nginx启动及关闭8.H5页面录音1.最终效果预览 2.实现思路说明 摄像头对接的海康的或者大华,将设备集成到青柿视频平台中,这样视频的播放用video标签即可…

文件夹数据同步工具 Sync Folders Pro mac支持选项

Sync Folders Pro for Mac 是一款功能强大的文件夹同步工具&#xff0c;旨在帮助用户在 Mac 计算机和移动设备之间创建双向同步。这款软件支持各种文件系统和设备&#xff0c;如 iPhone&#xff0c;iPad&#xff0c;iPod&#xff0c;Android 等。通过这款软件&#xff0c;用户可…

模型评估方法

目录 数据集切分 交叉验证 交叉验证实例 混淆矩阵 实例 代码实现 阈值 全局阈值处理 自适应阈值处理 阈值对结果的影响 ROC曲线 数据集切分 数据集切分是指将一个数据集分割成训练集和测试集的过程。常用的方法是随机切分&#xff0c;即将数据集中的样本按照一定比…

OpenAI 官方 Prompt 工程指南:写好 Prompt 的六个策略

其实一直有很多人问我&#xff0c;Prompt 要怎么写效果才好&#xff0c;有没有模板。 我每次都会说&#xff0c;能清晰的表达你的想法&#xff0c;才是最重要的&#xff0c;各种技巧都是其次。但是&#xff0c;我还是希望发给他们一些靠谱的文档。 但是&#xff0c;网上各种所…

APEX后台弱密码增强改造出现的问题及解决方法

为了加强APEX后台密码的安全性和可靠性&#xff0c;对其进行弱密码改造&#xff0c;通过改写登录函数&#xff0c;判断密码可靠性&#xff0c;在密码不符合条件&#xff08;密码长度必须大于8位小于16位&#xff0c;其包含数字、大小写字母与特殊符号&#xff09;时跳转到密码修…

【Docker】基于华为 openEuler 应用 Docker 镜像体积压缩

书接 openEuler 系列文章&#xff08;可以翻看测试系列&#xff09;&#xff0c;本次跟大家说说如何将 Java 包轻量化地构建到 openEuler 镜像中且保持镜像内操作系统是全补丁状态。 之前我们都是使用现成的 jdk 镜像进行构建的&#xff0c;如下图&#xff1a; FROM ibm-seme…