一、什么是参数校验
例如在某个登录请求中传递参数包含用户信息,需要判断用户信息是否为空,以及判断邮箱是否为空等情况,正常处理会写大量的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参数校验的资料请关注代码网其它相关文章!
发表评论