前言
在项目中,我们往往需要对入参进行校验,比如是否为null,是否为空字符串等,这时候,还有很多人是用代码去判断是否为Null等,其实这是大可不必的,对于这样简单的校验,我们直接使用@Valid+校验注解(如@NotBlank、@NotNull等)进行校验即可
@Valid校验入参
1、首先,我们在定义实体类的时候,使用校验注解来声明需要校验的字段
常用校验注解:
@NotNull:检验是否为null,可以为空字符串(“”),一般用在基本数据类型的非空校验上
@NotEmpty: 字符串不能为空,而且长度也必须大于0,集合也不能为空
@NotBlank:只能用于String类型,不能为null,而且调用trim()后(trim()用于移除字符串中的空白字符),长度必须大于0
@Size(min = ,max = ):用于校验字符串或者集合、map的个数,不能超出规定的最小长度和最大长度。不能用于int等非字符串和集合的字段上
@URL :校验url是否是合法的url
@Email:检验参数是否是邮箱格式
@Length(min = 1,max = 100) :校验字符串的长度是否满足要求
@Range(min = 1,max = 2) :校验数字的值
@Max(value = 1):小于等于数值,不能注解在字符串上
@Min(2) :大于等于数值,不能注解在字符串上
@Digits(integer = 1,fraction = 2):校验数字的格式 integer指定整数部分的长度 fraction指定小数部分的长度
例:
@Data
public class Theacher {
@NotBlank(message = "教师ID不能为空")
private String id;
@NotNull(message = "教师名称不能为空")
private String name;
}
2、在入参上加上@Valid注解,这样才会去校验入参,否则不会校验入参
例:
public void test(@Valid @RequestBody Theacher param){
}
上面是一个简单的入参,有时候我们的入参不是简单的基本类型,而是包含对象的,这时候就需要进行嵌套校验了
下面是@Valid 注解的源码:
@Target({ METHOD, FIELD, CONSTRUCTOR, PARAMETER, TYPE_USE })
@Retention(RUNTIME)
@Documented
public @interface Valid {
}
可以看到@Valid注解是可以修饰FIELD的,而这就是我们嵌套校验的关键,首先,我们使用校验注解定义对象,然后在入参对象字段上添加@Valid即可完成校验
例:
@Data
public class Student {
@NotBlank(message = "ID不能为空")
private String id;
@NotNull(message = "名称不能为空")
private String name;
@Valid
private Theacher theacher;
}
Theacher 类
@Data
public class Theacher {
@NotBlank(message = "教师ID不能为空")
private String id;
@NotNull(message = "教师名称不能为空")
private String name;
}