SpringBoot-Validation快速校验

ops/2024/10/19 0:20:26/

一、引入依赖

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

二、校验注解介绍

限制说明
@NotNull不为null
@NotEmpty①不为null ②字符串或集合长度>0
@NotBlank①只能校验字符串 ②不为null ③字符串去除前后缀空格后仍有内容
@Min限制最小值(整数)
@Max限制最大值(整数)
@Size限制长度在min~max之间
@DecimalMin限制最小值
@DecimalMax限制最大值
@Email对邮箱格式进行校验
@Pattern通过正则表达式进行校验

如果要开始校验规则,需要在接收数据的对象前面加上 @Validated 注解

三、分组校验

组是用 Java接口 来表示的,如下面的 增、删、改、查 四个组:

java">/*** 对校验类型进行分组*/
public class ValidationGroup {public interface Insert {}		//	增public interface Delete {}		//	删public interface Update {}		//	改public interface Select {}		//	查
}

每一个校验的注解上都有group属性,它可以为当前校验规则指定所属组,若不指定则为默认组, 如:

java">public class Student {//	默认组@NotNull			private Long id;//  新增组、修改组@NotEmpty( groups = {ValidationGroup.Insert.class,ValidationGroup.Update.class} )	private String name;
}

当激活新增组校验或者修改组校验时,name属性将会进行不为空的校验,激活组校验可以通过@Validated注解的value属性指定

如果不指定激活的组则激活默认组,此时id会进行不为null的校验

java">@RestController
public class StudentController {@PostMappingpublic void add(  @Validated(value={ValidationGroup.Insert.class})  //  对新增组字段进行校验@RequestBody	Student student) {//	...}
}

四、案例

这里我导入了lombok,不想导入也可以手动生成get、set方法、无参、全参构造

校验分组

java">/*** 对校验类型进行分组*/
public class ValidationGroup {public interface Insert {}public interface Delete {}public interface Update {}public interface Select {}
}

校验的实体类

java">import com.example.config.ValidationGroup;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;import javax.validation.constraints.*;
import javax.validation.groups.Default;
import java.time.LocalDate;
import java.util.Date;@AllArgsConstructor
@NoArgsConstructor
@Data
public class Student {@NotNull(message = "id不能为空",groups = {ValidationGroup.Update.class,   //  更新组ValidationGroup.Delete.class,   //  删除组})private Long id;@Size(min = 1,max = 5,message = "姓名长度必须在1~5个字符")@NotEmpty(message = "姓名不能为空",groups = {ValidationGroup.Insert.class} //  新增组)private String name;@Min(   value = 0,message = "年龄必须>=0",groups = ValidationGroup.Insert.class)          //  新增组@Max(value = 120,message = "年龄超过了120岁",groups = {ValidationGroup.Insert.class})      //  新增组private Integer age;@Pattern(   regexp = "\\d{4}(\\-|\\/|.)\\d{1,2}\\1\\d{1,2}",message = "生日格式必须是yyyy-MM-dd",groups = {ValidationGroup.Insert.class})  //  默认组private String birthday;@Email(message = "邮箱格式有误",groups = {ValidationGroup.Insert.class})   //  默认组private String email;
}

控制层

java">import com.example.config.ValidationGroup;
import com.example.model.Student;
import lombok.extern.slf4j.Slf4j;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.validation.constraints.Max;
import javax.validation.constraints.Min;@RestController
@RequestMapping("/student")
public class StudentController {@PostMappingpublic String add(@Validated(ValidationGroup.Insert.class)  //  对新增组字段校验@RequestBody Student student) {return "添加成功";}@PutMappingpublic String update(@Validated({ValidationGroup.Update.class})     //  对更新组字段校验@RequestBody Student student) {return "更新成功";}@DeleteMappingpublic String delete(@Validated(value={ValidationGroup.Delete.class})	//  对删除组字段校验@RequestBody Student student) {return "删除成功";}
}

希望通过SpringBoot的Validation校验能帮助小伙伴们解决大多数校验!


http://www.ppmy.cn/ops/37441.html

相关文章

探索Python的魔力:构建一个简单的网页爬虫

在当今数字化时代&#xff0c;数据无处不在。Python&#xff0c;作为一门强大且易于学习的编程语言&#xff0c;为我们提供了从互联网上抓取数据的利器。本文将向您展示如何使用Python构建一个简单的网页爬虫&#xff0c;帮助您快速获取所需信息。 为什么选择Python进行网页爬…

【论文查找】GPT给我的搜索建议

文章目录 前言整合信息的建议 前言 今天给自己设定了两个板块的论文阅读目标&#xff0c;做完计划之前问了一下GPT信息整和方案&#xff0c;发现GPT给我了一个非常好的方案&#xff0c;这里总结一下分享给大家。 整合信息的建议 以下内容为GPT回答 收集到相关论文后&#xff…

(图论)最短路问题合集(包含C,C++,Java,Python,Go)

不存在负权边&#xff1a; 1.朴素dijkstra算法 原题&#xff1a; 思路&#xff1a;&#xff08;依然是贪心的思想&#xff09; 1.初始化距离&#xff1a;dis[1]0&#xff0c;dis[i]INF&#xff08;正无穷&#xff09; 2.循环n次&#xff1a; 找到当前不在s中的dis最小的点&…

【doghead】mac: clion2024.1启动崩溃

doghead 是在mac 下跑各种数据的因此&#xff0c;在配置了环境后, 进行mac 构建 【doghead】mac构建&#xff0c;首先对mac的clion进行安装 mac 下安装clion2024.1 之前可能装过crack的clion教育优惠的clion跟之前的应该不同clion2024.1 在mac的新系统下崩溃google下竟然没有…

StatelessWidget处理网络请求

在Flutter中&#xff0c;StatelessWidget本身不支持直接进行网络请求&#xff0c;因为它旨在表示没有内部状态且不需要主动发起数据更新的UI组件。然而&#xff0c;您可以通过以下几种方式在使用StatelessWidget的同时处理网络请求&#xff1a; 使用FutureBuilder或StreamBuil…

基于大语言模型的复杂任务自主规划处理框架

源自&#xff1a;自动化学报 作者&#xff1a;秦龙, 武万森, 刘丹, 胡越, 尹全军, 阳东升, 王飞跃 “人工智能技术与咨询” 发布 摘 要 随着深度学习和自然语言处理技术的进步, 大语言模型(Large language models, LLMs)展现出巨大潜力. 尽管如此, 它们在处理复杂任务时仍存…

【k8s】利用Kubeadm搭建k8s1.29.x版本+containerd

文章目录 前言1.准备的三台虚拟机2.安装 kubeadm 前的准备工作3.安装containerd1.解压安装包2.生成默认配置文件3.使用systemd托管containerd4.修改默认配置文件 4.安装runc5.安装 CNI plugins5.1 安装nerdctl 6.安装 kubeadm、kubelet 和 kubectl6.1 配置crictl 7.初始化集群1…

MongoDB聚合运算符:$toLong

MongoDB聚合运算符&#xff1a;$toLong 文章目录 MongoDB聚合运算符&#xff1a;$toLong语法使用举例 $toLong聚合运算符将指定的值转换为长整数类型。如果指定的值为空或缺失&#xff0c;则返回null&#xff1b;如果值无法被转换为长整数&#xff0c;则报错。 语法 {$toLong:…