我们这里使用hibernate-validator作为对象参数验证器,所以在正式介绍SpringBoot参数验证之前,需要先简单了解一下hibernate-validator的使用。
hibernate-validator基本使用
引入依赖
编写需要验证对象
验证要求 person对象的用户名不能为空,年龄在1-150岁之间。
验证对象属性是否符合要求
- 我们只需要验证的对象实例即可完成对象验证,如果验证成功,那么返回一个空的集合,如果验证失败,会返回具体的验证失败的属性信息。
- 我们输出验证失败的错误信息如下:
验证规则
validator提供了大量的验证注解供我们使用,主要以下几类:
空/非空验证
-
@Null元素必须为空 -
@NotNull元素不能为空,空字符串""是非空
以下所有验证规则都在元素非空的时候才会进行验证,如果传入的元素为空,验证都会通过。
bool
-
@AssertTrue元素必须为true -
@AssertFalse元素必须为false
时间
-
@Future元素必须是未来的某个时间。 -
@FutureOrPresent元素必须是未来或者现在的某个时间。 -
@Past元素必须是过去的某个时间。 -
@PastOrPresent元素必须是过去或者现在的某个时间。
数学
数字类型可以是
BigDecimal、
BigInteger、
CharSequence 、
byte 、
short 、
int 、
long以及它们各自的包装器类型
-
@Digits元素必须是该数字类型下可以被接受的数值范围内。 -
@Negative元素必须是负数 -
@NegativeOrZero元素必须小于等于0 -
@Positive元素必须大于0 -
@PositiveOrZero元素必须大于等于0 -
@Max,@Min元素的大小必须符合指定大小
字符串
-
@Email邮箱格式验证 -
@NotBlack验证字符串非空,空字符串""也属于空 -
@Pattern字符串正则验证
模板正则
validator提供了字符串模板正则的注解,这里提供一份常用的正则表达式,大家可以直接作为常量工具类放到项目里使用
SpringBoot整合hibernate-validator
引入依赖
这个不再赘述,直接拷贝上文的依赖信息
配置hibernate-validator验证器对象
在配置类中加入hibernate-validator验证器对象
借助SpringMVC统一异常处理处理参数校验结果
配置好后,Spring会自动帮助我们进行参数验证,如果参数验证不通过,会抛出
BindException异常,我们刚刚手动验证时的
Set通过该异常获取。 我们这可以通过借助SpringMVC统一异常处理的能力处理这个异常
使用参数校验
我们只需要在校验参数的方法传参上标注
@Valid或者
@Validated都行
分组校验
那么
@Valid和
@Validated有什么区别呢?
Validated比
Valid多了一个属性,这个属性用于分组校验使用
啥叫分组校验?
就是一个实体类中的属性,在不同的方法传参中,方法的对属性的要求不同。 比如说,Person类中有三个属性,一个是用户名称,一个是邮箱,一个是年龄。 在注册用户接口中,用户名称,邮箱和年龄都不能为空,但是在更改用户的信息接口中,用户的年龄和邮箱都可以为空,但是用户名称不能为空。 这时候,我们就可以按照对属性校验的要求进行分组。
1、新建一个
RegisterGroup分组,该分组只是一个空的接口,仅仅用于标记该校验要求
2、对校验要求进行分组
3、方法调用时,加入分组要求
这种方式其实不推荐使用,我在标题的时候,也已经标记为“过时”,因为,我们完全可以为这两个不同的接口创建两个不同的实体类,而不是使用分组对校验要求进行隔离, 因为实际生产环境中,分组可能有非常多个,这会为我们的程序的可读性埋下隐患,后期开发人员难以维护,而且对于自动生成API文档也不友好。大家对于分组只需要了解即可,不建议在项目开发中使用。
最后
对于程序员来说,要学习的知识内容、技术有太多太多,要想不被环境淘汰就只有不断提升自己,从来都是我们去适应环境,而不是环境来适应我们!
不用多说,相信大家都有一个共识:无论什么行业,最牛逼的人肯定是站在金字塔端的人。所以,想做一个牛逼的程序员,那么就要让自己站的更高,成为技术大牛并不是一朝一夕的事情,需要时间的沉淀和技术的积累。
现在竞争这么激烈,只有通过不断学习,提高自己,才能保持竞争力。
对于一些不知道学习什么,没有一个系统路线的程序员,这里给大家提供一些学习资料
需要的小伙伴,可以一键三连, 点击这里获取免费领取方式!
《Java核心知识点合集(283页)》
内容涵盖:Java基础、JVM、高并发、多线程、分布式、设计模式、Spring全家桶、Java、MyBatis、ZooKeeper、Dubbo、Elasticsearch、Memcached、MongoDB、Redis、MySQL、RabbitMQ、Kafka、Linux、Netty、Tomcat、数据库、云计算等
《Java中高级核心知识点合集(524页)》
《Java高级架构知识点整理》
《Docker从入门到实践》
《spring could 学习笔记》
《JVM与性能调优知识点整理》
《MySQL性能调优与架构设计解析文档》305页
《Nginx入门到实战》319页
《Java并发编程》385页
《1000道 互联网Java工程师面试题 (485页)》
需要的小伙伴,可以一键三连, 点击这里获取免费领取方式!