案例:ZJJSpringBoot_2020/02/09 0:38:35_vg50j |
---|
参考:
https://www.iteye.com/blog/rensanning-2357373
https://blog.csdn.net/winxblast/article/details/83031646
(一)常用注解
需要注意的是,对象需要添加@Valid或@Validated 注解 ,这两个注解表名Spring对这个实体类进行校验,有了这个两个注解的其中一个,下面的注解才会生效,而校验的信息会存放到其后的 BindingResult 中
注意,必须相邻,如果有多个参数需要校验,形式可以如下。foo(@Validated Student student, BindingResult studentBindingResult ,@Validated Bar bar, BindingResult barBindingResult); 即一个校验类对应一个校验结果。
字符串
@NotBlank 只能作用于String上,不能为null,而且调用trim()之后,长度必须大于0
正则
@Pattern(regex=,flag=) 检查该字符串是否能够在match指定的情况下被regex定义的正则表达式匹配
其它
@AssertFalse 被标注的元素必须为false
@AssertTrue 被标注的元素必须为true
@DecimalMax @DecimalMin 限定被标注的属性的值的大小
@Digits(intege=,fraction=) 限定被标注的属性的整数位数和小数位数
@Future检验给定的日期是否比现在晚
@Past 校验给定的日期是否比现在早
@Max检查被标注的属性的值是否小于等于给定的值
@Min检查被标注的属性的值是否大于等于给定的值
@NotNull检验被标注的值不为空
@NotEmpty 不能为null,并且长度必须大于0
@Null 检验被标注的值为空
@Size(min=,max=) 检查被标注元素的长度
@Valid递归的对关联的对象进行校验
@Email 检查被标注的元素必须是邮箱
(二)嵌套校验,@Validated比@Valid的功能更强大,
@Validated比@Valid的功能更强大,主要体现在@Validated可以进行分组校验和嵌套校验。
如果同一个类,在不同的使用场景下有不同的校验规则,那么可以使用分组校验,用处不多,不再介绍。介绍一下嵌套校验
假如我们还要求学生填写父亲和母亲的名字(并且不能为空),而后端的设计中父亲和母亲的名字被放在另一个类Relation中,这就要求我们能进行嵌套校验。
我们要做如下2个事情
1.将方法中的@Valid注解改为@Validated
2.在relation属性上加@Valid注解
@Data public class Student { @NotBlank(message = “用户名不能为空”) private String name; @NotBlank(message = “手机号不能为空”) @Pattern(regexp = “^1(3|4|5|7|8)\\d{9}$”, message = “手机号码格式错误”) private String phone; @NotBlank(message = “邮箱不能为空”) @Email(message = “邮箱格式错误”) private String email; @NotNull(message = “父母名字不能为空”) @Valid private Relation relation; } |
---|
@Data public class Relation { @NotBlank(message = “父亲的姓名不能为空”) private String fatherName; @NotBlank(message = “父亲的姓名不能为空”) private String motherName; } |
分组校验
添加校验注解的方式固然很方便,但是如果Account 对象 在不同的业务中校验规则不同的话,难道我们需要编写两个Account 对象么?答案肯定不是,我们可以使用分组校验,对不同的校验规则进行隔离校验,互相不受影响。