SpringBoot中利用@Valid和@Validated进行参数校验
一、什么是参数校验
例如在某个登录请求中传递参数包含用户信息,需要判断用户信息是否为空,以及判断邮箱是否为空等情况,正常处理会写大量的If else 语句非常影响美观,可读性也非常低,因此提出了参数校验这个概念,也就是下文介绍的@Valid和@Validated注解
@Controller
@RequestMapping("/user")
public class UserControlelr {
@PostMapping("/login")
public String login(UserDTO userDTO){
if (userDTO.getUsername() == null || userDTO.getUsername().isEmpty()){
// 进行某种操作
}
if(userDTO.getEmail() == null || userDTO.getEmail().isEmpty()){
// 进行某种操作
}
return "loginSuccess";
}
}
二、@Valid和@Validated注解的异同
标注位置
- @Validated : 用在类、方法和方法参数上,但不能用于成员属性。
- @Valid:可以用在方法、构造函数、方法参数和成员属性上。
分组校验
- @Validated :支持分组验证,可以更细致地控制验证过程。
- @Valid:主要支持标准的Bean验证功能,不支持分组验证。
嵌套校验
- @Validated :不支持嵌套验证。
- @Valid:支持嵌套验证,可以嵌套验证对象内部的属性。
三、常用校验注解
| 注解 | 校验作用 |
|---|---|
| @NotBlank | 用在String 上面,一般用来校验String类型不能为空,而且调用trim()后,长度必须大于0。 |
| @NotEmpty | 用在集合上面,一般用来校验List类型(不能注释枚举),而且长度必须大于0 |
| @NotNull | 验证字段不为 null。一般用于数字类型。 |
| @Min(value) | 限制必须为一个不小于指定值的数字 |
| @Max(value) | 限制必须为一个不大于指定值的数字 |
| @past | 限制元素(日期类型)必须是一个过去的日期 |
| @Future | 限制元素(日期类型)必须是一个将来的日期 |
| 限制的元素值为是电子邮件地址 | |
| @Patern(value) | 限制必须符合指定的正则表达式 |
四、如何使用
1、普通参数校验
即直接检验像String、Interger这些普通参数
注意,要在controller上加入@Validated注解才能生效
@RestController
@Validated
public class Test1Controller {
@PostMapping("/test1")
public String test1(@NotEmpty String username, @Max(5) Integer value){
return "校验普通参数";
}
在Apifox上测试,会显示错误信息

2、对象参数校验
UserDTO.java
@Data
public class UserDTO {
/**
* 用户名
*/
@NotBlank
private String username;
/**
* 密码
*/
@NotBlank
private String pasword;
/**
* 邮箱
*/
@Email
private String email;
}
在参数的DTO上加入@Valid和@Validated效果是一样的
@RestController
public class Test2Controller {
@PostMapping("/test2")
public String test2(@Valid @RequestBody UserDTO userDTO){
return "对象参数验证";
}
}
在Apifox上测试,会显示错误信息

3、集合参数校验
注意,要在controller上加入@Validated注解才能生效
@RestController
@Validated
public class Test3Controller {
@PostMapping("/test3")
public String test3(@Valid @RequestBody List<UserDTO> userDTOList){
return "集合参数校验";
}
}
在Apifox上测试,会显示具体第几个变量的哪几个参数有错误

4、嵌套校验
UserListDTO.java
@Data
public class UserListDTO {
/**
* List的name
*/
@NotBlank
private String listName;
/**
* User列表
*/
@Valid
private List<UserDTO> userDTOList;
}
@RestController
public class Test4Controller {
@PostMapping("/test4")
public String test4(@Validated @RequestBody UserListDTO userListDTO){
return "嵌套参数校验";
}
}
在Apifox上测试,会显示具体第几个变量的哪几个参数有错误

以上就是SpringBoot中利用@Valid和@Validated进行参数校验的详细内容,更多关于SpringBoot @Valid和@Validated参数校验的资料请关注脚本之家其它相关文章!
相关文章
Java中NoClassDefFoundError异常的原因及解决方法
在 Java 开发中,java.lang.NoClassDefFoundError 是运行时异常中最常见的问题之一,它通常出现在程序编译成功后,却在运行时因 JVM 无法找到某个类的定义 而抛出,本文给大家介绍了Java中NoClassDefFoundError异常的原因及解决方法,需要的朋友可以参考下2025-05-05
Java中的CAS(Compare-And-Swap)操作示例详解
CAS是一种原子操作,用于在多线程环境中实现无锁(lock-free)的线程安全编程,下面通过本文给大家介绍Java中的CAS(Compare-And-Swap)操作示例详解,感兴趣的朋友一起看看吧2025-06-06
Spring-AOP @AspectJ切点函数之@annotation()用法
这篇文章主要介绍了Spring-AOP @AspectJ切点函数之@annotation()用法,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教2021-07-07
Nebula Graph介绍和SpringBoot环境连接和查询操作
Nebula Graph 是一款开源的、分布式的、易扩展的原生图数据库,能够承载包含数千亿个点和数万亿条边的超大规模数据集,并且提供毫秒级查询,这篇文章主要介绍了Nebula Graph介绍和SpringBoot环境连接和查询,需要的朋友可以参考下2022-10-10


最新评论