Spring MVC 参数校验-校验注解

server/2025/3/29 5:37:57/

注解规则
@Null标注值必须为 null
@NotNull标注值不可为 null
@AssertTrue标注值必须为 true
@AssertFalse标注值必须为 false
@Min(value)标注值必须大于或等于 value
@Max(value)标注值必须小于或等于 value
@DecimalMin(value)标注值必须大于或等于 value
@DecimalMax(value)标注值必须小于或等于 value
@Size(max,min)标注值大小必须在 max 和 min 限定的范围内
@Digits(integer,fratction)标注值值必须是一个数字,且必须在可接受的范围内
@Past标注值只能用于日期型,且必须是过去的日期
@Future标注值只能用于日期型,且必须是将来的日期
@Pattern(value)标注值必须符合指定的正则表达式
注解规则
@Email标注值必须是格式正确的 Email 地址
@Length标注值字符串大小必须在指定的范围内
@NotEmpty标注值字符串不能是空字符串
@Range标注值必须在指定的范围内

易混淆:

注解规则
@NotNull

包装类型不为null。

当被标注的字段值为 null 时,会认为校验失败而抛出异常。

该注解不能用于字符串类型的校验,若要对字符串进行校验,应该使用 @NotBlank 或 @NotEmpty

@NotEmpty

集合类型长度大于0。

对于 CharSequence、Collection、Map 或者数组对象类型的属性进行校验,校验时会检查该属性是否为 Null 或者 size()==0,如果是的话就会校验失败。

但是对于其他类型的属性,该注解无效。需要注意的是只校验空格前后的字符串,如果该字符串中间只有空格,不会被认为是空字符串,校验不会失败。

@NotBlank

字符串,不为null,且不为" "字符串。

对于字符串类型的属性进行校验,校验时会检查该属性是否为 Null 或 “” 或者只包含空格,如果是的话就会校验失败。

需要注意的是,@NotBlank 注解只能用于字符串类型的校验。

使用方式

导入依赖

<!-- 校验注解 -->
<dependency><groupId>jakarta.platform</groupId><artifactId>jakarta.jakartaee-web-api</artifactId><version>9.1.0</version><scope>provided</scope>
</dependency><!-- 校验注解实现-->        
<!-- https://mvnrepository.com/artifact/org.hibernate.validator/hibernate-validator -->
<dependency><groupId>org.hibernate.validator</groupId><artifactId>hibernate-validator</artifactId><version>8.0.0.Final</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.hibernate.validator/hibernate-validator-annotation-processor -->
<dependency><groupId>org.hibernate.validator</groupId><artifactId>hibernate-validator-annotation-processor</artifactId><version>8.0.0.Final</version>
</dependency>

使用注解

import jakarta.validation.constraints.Email;
import jakarta.validation.constraints.Min;
import org.hibernate.validator.constraints.Length;/*** projectName: com.atguigu.pojo*/
public class User {//age   1 <=  age < = 150@Min(10)private int age;//name 3 <= name.length <= 6@Length(min = 3,max = 10)private String name;//email 邮箱格式@Emailprivate String email;public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getEmail() {return email;}public void setEmail(String email) {this.email = email;}
}

 结果

优化

接收错误信息,自定义返回结果

 一定要加  @Validated 注解,否则校验不生效

BindingResult result 会收集校验的结果

@RestController
@RequestMapping("user")
public class UserController {/*** @Validated 代表应用校验注解! 必须添加!*/@PostMapping("save")public Object save(@Validated @RequestBody User user,//在实体类参数和 BindingResult 之间不能有任何其他参数, BindingResult可以接受错误信息,避免信息抛出!BindingResult result){//判断是否有信息绑定错误! 有可以自行处理!if (result.hasErrors()){System.out.println("错误");String errorMsg = result.getFieldError().toString();return errorMsg;}//没有,正常处理业务即可System.out.println("正常");return user;}
}

 


http://www.ppmy.cn/server/179092.html

相关文章

CSS实现当鼠标悬停在一个元素上时,另一个元素的样式发生变化的效果

CSS可以实现当鼠标悬停在一个元素上时&#xff0c;另一个元素的样式发生变化的效果。可以通过以下几种方法来实现&#xff1a; 1. 使用兄弟选择器&#xff08;Adjacent Sibling Selector&#xff09; 如果两个元素是兄弟关系&#xff08;即它们有相同的父元素&#xff09;&am…

DJANGO 中间件的白名单配置

在处理白名单内的多个 Apps 的 URL 链接时&#xff0c;可以采用以下几种方法来简化白名单的配置&#xff1a; 1. 使用 reverse 动态获取 URL 如果你在 urls.py 中为每个 App 的 URL 定义了名称&#xff08;name 参数&#xff09;&#xff0c;可以使用 reverse 函数动态获取这…

Java高并发容器的内核解析:从无锁算法到分段锁的架构演进

《Java高并发容器的内核解析&#xff1a;从无锁算法到分段锁的架构演进》 本文将以JUC包核心容器为切入点&#xff0c;深入剖析ConcurrentHashMap在Java 8中的64位Hash分段技术&#xff0c;解密LinkedBlockingQueue双锁队列设计的吞吐量秘密&#xff0c;并给出各容器在亿级流量…

微信小程序中使用Less样式方法

在微信小程序中使用Less样式&#xff0c;可以通过以下步骤实现。主要原理是借助Visual Studio Code&#xff08;VSCode&#xff09;的插件将Less文件自动编译为小程序支持的.wxss文件&#xff0c;或通过微信开发者工具的扩展功能直接集成Less编译环境。以下是具体方法&#xff…

Zookeeper 核心原理详解以及快速搭建

一、引言 Zookeeper 是 Apache 开源的分布式协调服务&#xff0c;专为分布式系统提供一致性、高可用性和容错能力。其核心设计目标是通过简单的接口&#xff08;如文件系统目录树结构&#xff09;实现复杂的分布式一致性协议&#xff0c;帮助开发者解决分布式环境下的协调难题…

3. 轴指令(omron 机器自动化控制器)——>MC_CamIn

机器自动化控制器——第三章 轴指令 14 MC_CamIn变量▶输入变量▶输出变量▶输入输出变量 功能说明▶指令详情▶时序图▶指令的中止▶重启运动指令▶多重启动运动指令▶异常 示例程序1▶参数设定▶动作示例▶梯形图▶结构文本(ST)▶示例程序2▶参数设定▶动作示例▶梯形图▶结构…

机器学习-04-分类算法-02贝叶斯算法案例

总结 本系列是机器学习课程的系列课程&#xff0c;主要介绍机器学习中分类算法&#xff0c;本篇为分类算法与贝叶斯算法部分。 本门课程的目标 完成一个特定行业的算法应用全过程&#xff1a; 懂业务会选择合适的算法数据处理算法训练算法调优算法融合 算法评估持续调优工程…

Milvus vs. ElasticSearch:向量库检索性能测试

目录 1. 构建检索库2. 测试条件3. 测试结果4. 性能分析5. 结论 1. 构建检索库 构建通用场景库总计约2万张。构建车辆数据库总计约12万张。构建公共数据库&#xff0c;包括Flickr30k、COCO、nlvr2、vqa等数据集约43万张。 2. 测试条件 环境说明&#xff1a;分别单机部署Milvu…