很多程序员在写web开发时经常遇到字段的校验,邮箱、出生日期、非空等业务需求,为了解决这个繁琐重复的烦恼,hibernate validator(官方文档)提供了一套比较完善、便捷的验证实现方式。
下面来介绍一下validator在实际业务中,特别是spring boot这种轻便框架中的一些用法呗。
pom配置:
spring-boot-starter-web包里面有hibernate-validator包,不需要引用hibernate validator依赖。
Hibernate Validator有以下两种验证模式:
1、普通模式(默认是这个模式)
普通模式(会校验完所有的属性,然后返回所有的验证失败信息)
2、快速失败返回模式
快速失败返回模式(只要有一个验证失败,则返回)
实际场景中,我们多选用快速失败返回模式,即一组数据校验不过则返回异常,参考官方文档,创建一个ValidatorConfiguration,用@Configuration进行注解,代码如下:


配置文件加载成功,其中“hibernate.validator.fail_fast”设置为true即为快速校验模式,false即为普通模式。
在使用快速失败返回模式中,我们要设置分组,来实现谁先校验,如先校验用户名,再校验邮箱……
先定义三个分组:
public interface GroupA {
}
public interface GroupB {
}
@GroupSequence( { Default.class, GroupA.class, GroupB.class })
public interface Group {
}
然后定义实体类并进行分组和做好注解:@NotBlank为不能为空,@Pattern为自定义格式,@Email为邮箱格式……(详细的可参考官方文档)

最后写controller,注意,要用@Validated,不能用valid。

进行测试一波效果先:

啥都不填,按照我们的分组,用户名在default,最先校验,所以返回的是:

故意填错邮箱格式:


故意填错生日,


至此,validator校验框架测试成功,在实际应用场景中还有很多用例,几行代码加注解让你我他远离繁琐重复冗余的字段名校验。
好好学习,天天向上,希望以后有机会一起打怪升级!
网友评论