在填写表单时,前后端都要进行校验,前端往往是对非空、是否满足正则表达式进行校验
这里主要讲讲后端的校验注解JRS303:
1.一般校验注解都在这个包下
普通校验:
2.校验注解放在2个地方:
i)controller的传参入口处(保存和修改接口)加@Valid:
ii)Entity类对象的具体属性名上:
message可以自定义错误信息,否则就是源代码中的默认错误信息
启动后,若不满足填写要求,会有相应的响应信息:
3.以上的信息形式不是我们需要的形式,要变为R里面的json形式:
则在controller的参数里加入BindingResult参数,可以截获出现错误时的错误信息
缺点:这样就得在每一个controller需要的接口里都填写这样的代码,造成代码冗余
需要使用统一校验注解配置
5.统一校验:
1)创建一个Exception包,在里面创建一个java类:
i)@RestControllerAdvice就相当于被注掉的后面两个灰色的注解
ii)@ExceptionHandler是分配错误的校验类型
iii)这里BindingResult仍然派上了用场
iv)后面的BizCodeEnume是自定义配置的类,错误信息有:
该java类中还有一个错误捕捉方法,用于不符合精准匹配捕捉错误方法的错误:
2)没有BindingResult
6.分组校验
1)先来解释一下各种校验注解:
i)@NotNull、@NotEmpty、@NotBlank的区别:
@NotNull可以配在所有类型上
@NotEmpty只能配置在
@NotBlank表示必须有一个非“空格”字符,而@NotNull可以有空格字符
ii)@Pattern:字符校验码,regexp表示正则表达式
iii)@URL:
2)给各个校验注解分组:
valid变为validated,且没有BindingResult
改Entity属性名上的校验注解所属组
showStatus属性名多一个
特殊情况:
默认没有指定分组的校验注解如:@NotBlank,在分组校验情况下(@Validated({AddGroup.class}))不生效
7.自定义校验注解
要引入包:
参照校验注解的源码自定义了一个校验注解类:
成功校验:(使用Postman测试接口)