Java校验API
今天和大家分享一下如何在SpringMVC中校验参数。首先大家要知道的就是java校验API,即java Validation API,又称为JSR-303。从Spring3.0版本开始,SpringMVC就提供了对java校验API的支持,要在SpringMVC中使用java校验API的话只需要在类路径下包含java校验API的实现就好了,比如Hibernate Validator。
java校验API定义了多个注解,这些注解直接在所需要校验的属性上使用就可以了,这些注解都在javax.validation.constraints包中,我们一起来看一下这些注解。
我们今天使用SpringBoot的2.2.1.RELEASE进行测试。
如何开启校验
要开启校验仅仅需要2步:1.在需要校验的字段上添加上注解;2.在SpringMVC的路径方法的需要校验的参数上添加@Valid注解,如图:
获取校验的错误
获取校验的错误需要在Valid注解的后面添加Errors参数就可以了,记得Errors参数要添加在校验参数的后面才可以。如图:
图中通过hasErrors判断是否存在参数错误,通过getFieldErrors返回错误的信息。
校验注解
@AssertFalse:
所注解的元素必须是Boolean类型,并且值为false
@AssertTrue:
所注解的元素必须是Boolean类型,并且值为true
@DecimalMax:
所注解的元素必须是数字,并且值要小于或等于给定的BigDecimalString值
@DecimalMin:
所注解的元素必须是数字,并且值要小于或等于给定的BigDecimalString值
@Digits:
所注解的元素必须是数字,并且它的值必须有指定的位数
@Email:
所注解的元素要匹配指定的正则表达式
@Max:
所注解的元素必须是数字,并且值要小于或等于给定的值。注意如果@Max所注解的元素是null,则@Max注解会返回true,所以应该把@Max注解和@NotNull注解结合使用。
@Min:
所注解的元素必须是数字,并且值要大于或等于给定的值。注意如果@Min所注解的元素是null,则@Min注解会返回true,即也会通过校验,所以应该把@Min注解和@NotNull注解结合使用。
@NotBlank:
所注解的元素不能为null且不能为空白,用于校验CharSequence(含String、StringBuilder和StringBuffer)
@NotEmpty:
所注解的元素不能为null且长度大于0,可以是空白,用于校验CharSequence、数组、Collection和Map
@NotNull:
所注解的元素不能为null
@Null:
所注解的元素必须为null
@Pattern:
所注解的元素必须匹配指定的正则表达式。注意如果@Pattern所注解的元素是null,则@Pattern注解会返回true,即也会通过校验,所以应该把@Pattern注解和@NotNull注解结合使用。
@Size:
所注解的元素必须符合指定的大小,该注解可用于数组,CharSequence(含String、StringBuilder和StringBuffer),Collection和Map。注意如果@Size所注解的元素是null,则@Size注解会返回true,即也会通过校验,所以应该把@Size注解和@NotNull注解结合使用。
ConstraintValidator实现类
最后和大家提一下,hibernate-validator的校验实现位于org.hibernate.validator.internal.constraintvalidators包下,校验的实现类都实现了ConstraintValidator接口,具体如下图所示。感兴趣的小伙伴可以通过源码看看hibernate-validator的具体校验逻辑。
举几个例子:
@NotBlank的校验源码:
@Size对于数组的校验源码:
@NotEmpty对于Collection的校验源码:
结束
今天简单和大家介绍了如何在SpringMVC中校验参数,可以说SpringMVC大大简化了我们在参数检验上的工作量,这也正是框架带来的好处。
好啦,希望今天的文章能帮助到大家,小伙伴们如果有什么疑问可以在评论区留言哦。