Spring Validation参数校验

devtools/2025/3/17 12:02:30/

Spring Validation是Spring框架中用于数据校验的核心模块,通过注解简化数据校验逻辑。

1. 依赖引入(SpringBoot项目)

Spring Boot项目:自动包含spring-boot-starter-validation

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

2. 基本使用

在Spring MVC的Controller中使用@Valid和@Validated触发校验。

示例代码:

java">@PostMapping("/users")
public ResponseEntity<?> createUser(@RequestBody @Valid User user, BindingResult result) {if (result.hasErrors()) {// 处理校验错误return ResponseEntity.badRequest().body(result.getAllErrors());}// 保存用户return ResponseEntity.ok(userService.save(user));
}
  • @Valid:触发校验
  • @Validated:Spring的扩展,支持分组校验
  • BindingResult:保存校验结果,需紧跟被校验参数

3. 常用校验注解

以下是Bean Validation内置的校验注解:

注解说明
@NotNull值不能为null
@NotEmpty字符串/集合不能为空
@NotBlank字符串必须包含非空格字符
@Size(min, max)字符串/集合长度在范围内
@Min(value)数字最小值
@Max(value)数字最大值
@Email校验邮箱格式
@Pattern(regexp)正则表达式匹配
@Positive必须为正数
@Future日期必须是未来时间

示例实体类:

java">public class User {@NotBlank(message = "用户名不能为空")private String username;@Size(min = 6, max = 20, message = "密码长度需在6-20位")private String password;@Email(message = "邮箱格式不正确")private String email;// Getters and Setters
}

4.分组校验

通过分组实现不同场景的差异化校验规则。

定义分组接口:

java">public interface CreateGroup {}
public interface UpdateGroup {}

在实体中使用分组:

java">public class User {@Null(groups = CreateGroup.class, message = "创建时ID必须为空")@NotNull(groups = UpdateGroup.class, message = "更新时ID不能为空")private Long id;// 其他字段...
}

在Controller中指定分组:

java">@PostMapping("/users")
public ResponseEntity<?> createUser(@Validated(CreateGroup.class) @RequestBody User user) {// ...
}

5. 自定义校验

步骤1:定义注解

java">@Target({FIELD, PARAMETER})
@Retention(RUNTIME)
@Constraint(validatedBy = PhoneValidator.class)
public @interface Phone {String message() default "手机号格式不正确";Class<?>[] groups() default {};Class<? extends Payload>[] payload() default {};
}

步骤2:实现校验逻辑

java">public class PhoneValidator implements ConstraintValidator<Phone, String> {@Overridepublic boolean isValid(String phone, ConstraintValidatorContext context) {return phone != null && phone.matches("^1[3-9]\\d{9}$");}
}

步骤3:使用自定义注解

java">public class User {@Phoneprivate String phone;
}


http://www.ppmy.cn/devtools/167815.html

相关文章

正则表达式的基本应用以及查询工具

首先&#xff0c;是对于基本的正则表达式的应用以及部分介绍(见代码注释部分): 以javaScript为例 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-wi…

智能家居分享

因为最近沉迷智能家居&#xff0c;所以来给大家分享一些轻松改变生活体验的小家具 1&#xff1a; 智能门锁 出门忘记带钥匙是许多人都遇到过的尴尬事&#xff0c;智能门锁的出现完美解决了这个困扰。智能门锁采用指纹识别、密码、刷卡、手机等多种开锁方式&#xff0c;大大增…

神聖的綫性代數速成例題5. 矩陣運算的定義、轉置的性質、方陣多項式的概念

矩陣運算的定義&#xff08;補充&#xff09;&#xff1a;矩陣乘法&#xff1a;如前所述&#xff0c;設是矩陣&#xff0c;是矩陣&#xff0c;乘積的元&#xff0c;是矩陣。轉置的性質&#xff1a;若是矩陣&#xff0c;則。&#xff0c;其中和是同型矩陣。&#xff0c;為數。&a…

Ubuntu下安装后anaconda出现conda:command not found

今天在ubuntu系统上安装好anaconda之后&#xff0c;输入conda --version后遇到了如下问题 conda:command not found原因通常是由于anaconda的安装路径没有正常的被添加到系统的PATH环境变量下&#xff0c;解决步骤如下&#xff1a; 在终端中输入&#xff1a;echo $PATH观察输…

从被动响应到主动预见:智能可观测性技术的变革与实践

思维导图 一、引言 &#x1f303; 想象一下&#xff0c;在一个深夜 &#x1f319;&#xff0c;你的关键业务系统突然出现故障 &#x1f6a8;。传统情况下&#xff0c;你可能会收到大量不相关的告警 &#x1f4f1;&#x1f4ac;&#x1f4ac;&#x1f4ac;&#xff0c;然后花费…

奇安信面试题

《网安面试指南》https://mp.weixin.qq.com/s/RIVYDmxI9g_TgGrpbdDKtA?token1860256701&langzh_CN 5000篇网安资料库https://mp.weixin.qq.com/s?__bizMzkwNjY1Mzc0Nw&mid2247486065&idx2&snb30ade8200e842743339d428f414475e&chksmc0e4732df793fa3bf39…

【Git】--- 初识Git Git基本操作

Welcome to 9ilks Code World (๑•́ ₃ •̀๑) 个人主页: 9ilk (๑•́ ₃ •̀๑) 文章专栏&#xff1a; Git 本篇我们来初步认识Git企业级应用是什么&#xff0c;有什么用以及Git基本操作。 &#x1f3e0; 初始Git 提出问题 在日常生活中&#xff0c;我们进行…

感受命令行界面的魅力——Linux环境下基础开发工具的使用

目录 1.Linux 软件包管理器 yum 1.1 什么是软件包 1.2 关于 rzsz 1.3 注意事项 1.4 查看软件包 1.5 如何安装软件 1.6 如何卸载软件 2. Linux开发工具 2.1 Linux编辑器-vim使用 1. vim的基本概念 正常/普通/命令模式(Normal mode) 插入模式(Insert mode) 末行模式…