后端参数校验

前端给后端传输数据,有时候参数需要校验,我们自己写代码会比较麻烦,我们可以使用springboot为我们提供的注解,降低这些没有必要的代码开发。

1.引入依赖

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

2.常用注解说明

• @NotNull:值不能为null;

• @NotEmpty:字符串、集合或数组的值不能为空,即⻓度⼤于0;
• @NotBlank:字符串的值不能为空⽩,即不能只包含空格;
• @Size:字符串、集合或数组的⼤⼩是否在指定范围内;
• @Min:数值的最⼩值;
• @Max:数值的最⼤值;
• @Pattern:字符串是否匹配指定的正则表达式;
• @Email:字符串是否为有效的电⼦邮件地址;
• @Future:⽇期是否为将来的⽇期;

• @Past:⽇期是否为过去的⽇期;

3.使用案例

@Validated:⽤于标记,某个类将触发验证

@GetMapping("/validation")
public String validation(@Validated ValidationDTO validationDTO) {return "参数校验测试";
}
@Getter
@Setter
public class ValidationDTO {@NotBlank(message = "⽤⼾账号不能为空")private String userAccount;@NotBlank(message = "⽤⼾密码不能为空")@Size(min = 5, max = 10, message = "密码⻓度不能少于6位,不能⼤于10位")private String password;@Min(value = 0, message = "年龄不能⼩于0岁")@Max(value = 60, message = "年龄不能⼤于60岁")private int age;@Email(message = "必须符合邮箱格式")private String email;@Pattern(regexp = "^(13[0-9]|14[01456879]|15[0-35-9]|16[2567]|17[0-8]|18[0-9]|19[0-35-9])\\d{8}$", message = "⼿机号码格式不正确")private String phone;@Past(message = "开始⽇期必须是过去的⽇期")private LocalDate startDate;@Future(message = "结束⽇期必须是未来的⽇期")private LocalDate endDate;
}

捕获异常:

@ExceptionHandler(BindException.class)
public R<Void> handleBindException(BindException e) {log.error(e.getMessage());String message = join(e.getAllErrors(),DefaultMessageSourceResolvable::getDefaultMessage, ", ");return R.fail(ResultCode.FAILED_PARAMS_VALIDATE.getCode(), message);
}private <E> String join(Collection<E> collection, Function<E, String> function, CharSequence delimiter) {if (CollUtil.isEmpty(collection)) {return StrUtil.EMPTY;}return collection.stream().map(function).filter(Objects::nonNull).collect(Collectors.joining(delimiter));
}

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

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

相关文章

C++ - 仿 RabbitMQ 实现消息队列--服务端核心模块实现(一)

目录 日志打印工具 实用 Helper 工具 sqlite 基础操作类 字符串操作类 UUID 生成器类 文件基础操作 文件是否存在判断 文件大小获取 读文件 写文件 文件重命名 文件创建/删除 父级目录的获取 目录创建/删除 附录&#xff08;完整代码&#xff09; 日志打印工具 为了便…

C语言:第07天笔记

C语言&#xff1a;第07天笔记 内容提要 循环结构 break与continue 综合案例《猜拳游戏》数组 数组的概念一维数组流程控制 break与continue break 功能&#xff1a; ① 用在switch中&#xff0c;用来跳出switch中的case语句&#xff1b;如果case没有break&#xff0c;可能会产生…

qt 中英文翻译 如何配置和使用

qt 中英文翻译 如何配置和使用 1. 在.pro文件中添加TRANSLATIONS 在你的 .pro 文件&#xff08;比如 HYAC_AAF_HOST.pro&#xff09;中添加&#xff1a; TRANSLATIONS \ zh\_CN.ts en\_US.ts这会告诉Qt项目你要支持中文和英文。 2. 提取可翻译文本&#xff08;生成ts文件&#…

Leetcode 710. 黑名单中的随机数

1.题目基本信息 1.1.题目描述 给定一个整数 n 和一个 无重复 黑名单整数数组 blacklist 。设计一种算法&#xff0c;从 [0, n - 1] 范围内的任意整数中选取一个 未加入 黑名单 blacklist 的整数。任何在上述范围内且不在黑名单 blacklist 中的整数都应该有 同等的可能性 被返…

RxJava 全解析:从原理到 Android 实战

在 Android 开发中&#xff0c;异步任务处理是绕不开的核心场景 —— 网络请求、数据库操作、文件读写等都需要在后台执行&#xff0c;而结果需回调到主线程更新 UI。传统的 “HandlerThread” 或 AsyncTask 不仅代码冗余&#xff0c;还容易陷入 “回调地狱”&#xff08;嵌套回…

OpenCV 官翻7 - 对象检测

文章目录ArUco 标记检测标记与字典标记物创建标记检测姿态估计选择字典预定义字典自动生成字典手动定义字典检测器参数阈值处理adaptiveThreshConstant轮廓过滤minMarkerPerimeterRate 与 maxMarkerPerimeterRatepolygonalApproxAccuracyRateminCornerDistanceRateminMarkerDis…

【Oracle】ORACLE OMF说明

ORACLE OMF (Oracle Managed Files) 是 Oracle 数据库提供的一项自动化文件管理功能。它的核心目的是简化数据库管理员&#xff08;DBA&#xff09;对数据库底层操作系统文件的管理工作。 以下是 OMF 的关键要点&#xff1a; 核心功能&#xff1a;自动命名和定位文件 在创建数据…

408考研逐题详解:2010年第35题——RIP协议

2010年第35题 某自治系统内采用 RIP 协议&#xff0c;若该自治系统内的路由器 R1 收到其邻居路由器 R2 的距离矢量&#xff0c;距离矢量中包含信息 <net1, 16>&#xff0c;则能得出的结论是&#xff08; &#xff09; A. R2 可以经过 R1 到达 net1&#xff0c;跳数为17 …

http与https的主要区别是什么?

什么是HTTP&#xff1f; HTTP&#xff08;HyperText Transfer Protocol&#xff0c;超文本传输协议&#xff09;是互联网上应用最为广泛的一种网络协议。它构成了Web数据通信的基础&#xff0c;并定义了客户端和服务器之间如何请求和传递网页信息。当您在浏览器中输入一个网址时…

STC89C52系列单片机简介

STC89C52系列单片机是由中国宏晶科技&#xff08;STC&#xff09;推出的一款新一代增强型8051内核单片机。它不仅继承了传统8051指令系统的兼容性&#xff0c;还在性能、功耗、抗干扰能力以及性价比方面进行了全面提升&#xff0c;广泛应用于各类嵌入式控制场景&#xff0c;如工…

基于 Docker 环境的 JupyterHub 详细部署手册

本文详细介绍基于Docker Compose的单机版JupyterHub部署方案&#xff0c;通过容器化技术实现多用户Notebook环境的快速搭建。方案采用官方JupyterHub镜像&#xff0c;配置11个端口映射&#xff08;18000-18010&#xff09;支持用户并发&#xff0c;通过数据卷挂载&#xff08;.…

常见的万能密码

目录 1. 通用SQL注入 2. 登录绕过 3. 密码重置 1. 通用SQL注入 or 11-- " or 11-- or aa " or "a""a or 11# " or 11# or 11/* " or 11/* or 11 " or "1""1 2. 登录绕过 admin-- admin or 11-- admin or aa …

04训练windows电脑低算力显卡如何部署pytorch实现GPU加速

大多数人用的电脑的显卡配置可能没有那么强,也就是说,我们很难享受到最新版本pytorch给我们带来的模型训练的速度和效率,为此,我们需要想办法在现有显卡情况下部署应用pytorch。 笔者有一台电脑,显卡算力很低,那么以该电脑为例,为大家介绍如何部署应用pytorch功能。 1…

PPT科研画图插件

PPT科研画图插件 iSlide- 让PPT设计简单起来 | PPT模板下载平台iSlide - 简单&#xff0c;好用的PPT插件&#xff01;拥有30万 原创可商用PPT模板&#xff0c;PPT主题素材&#xff0c;PPT案例&#xff0c;PPT图表&#xff0c;PPT图示&#xff0c;PPT图标&#xff0c;PPT插图和8…

CSS实现背景图片渐变透明

复合写法background: linear-gradient(180deg, rgba(255, 255, 255, 0) 0%, #FFF 82.5%),url(https://example.com/image.jpg) center / cover no-repeat;参数说明&#xff1a;linear-gradient(180deg, rgba(255, 255, 255, 0) 0%, #FFF 82.5%)创建从下至上的垂直渐变&#xff…

基于pyside6的通用机器人遥控控制界面

1. 前言 这两天需要帮一个朋友做一个简单的遥控控制界面&#xff0c;用于控制一台复合机器人(万向轮底盘机械臂旋转云台)&#xff0c;在这里分享一下 2. 开发框架 由于朋友那边的控制接口都是使用python来写的&#xff0c;所以我这里也使用py来完成这个遥控界面的开发。但其…

【iOS】ZARA仿写

【iOS】ZARA仿写 文章目录【iOS】ZARA仿写前言首页发现我的对姓名的更改总结前言 暑假第一个的任务仿写ZARA 虽然不是特别难却有很多小细节需要注意 首页 点进程序出现的就是整个项目最主要的一个点&#xff0c;即首页的无限轮播图&#xff0c;不管是自动轮播还是手动滑动&a…

Kubernetes Pod 调度基础

一、Replication Controller 和 ReplicaSet1、Replication ControllerReplication Controller&#xff08;复制控制器&#xff0c;RC&#xff09;RC 用来确保 Pod 副本数达到期望值&#xff0c;这样可以确保一个或多个同类 Pod 总是可用的。如果存在的 Pod 数量大于设定的值&am…

菜鸟的C#学习(二)

文章目录一、类的访问1、普通类继承抽象类2、普通类继承抽象类&#xff0c;抽象类继承接口&#xff0c;三者联系二、类中方法的访问2.1 抽象方法和虚方法2.2 虚方法和普通方法**1. 调用机制****2. 方法重写****3. 设计意图****4. 性能差异****5. 语法对比表****总结&#xff1a…

04 51单片机之数码管显示

文章目录1、前言2、数码管3、单个数码管引脚定义3-1、单个共阴极3-2、单个共阳极3-3、单个数码管引脚定义4、四位一体数码管引脚定义4-1、四位一体共阴极数码管4-2、四位一体共阳极数码管4-3、四位一体数码管引脚定义5、数码管原理图6、C51数组&#xff08;补充知识点&#xff…