@Validate注解使用原理详解

1. 基本使用

平时写rest接口的时候大家肯定用过@Validated注解,对rest的提交的数据进行校验

类似如下的写法,post接口对body里面的json字符串进行校验 

 

 在请求发送之后,会去校验json字符串的字段,如果cityName,或者cityid不符合注解定义的规则,就会直接报错。请求在dispatchServlet阶段就会被拦截掉,对应的controller方法都进不来。使用这种方式校验远比自己写个方法在controller中校验参数方便优雅多了。

以上介绍的是@Validate注解的基本用法,大家知道怎么用了之后,就可以去使用不同的注解有什么作用了。

2. 自定义注解使用

自定义注解使用,可以仿照现有的直接仿写自己的注解。注解要配置自己的注解验证类,这样在验证的时候才会找到使用什么validator验证

 使用的时候就这样

 上述介绍的是自定义注解,需要注意的点是需要给注解配置对应的validator.class。下面介绍的是注解找到对应的validator的过程

3. 注解原理

刚才大家应该都看到了,自定义注解需要配置验证器的class,但是内置的注解并不需要例如@Max,那么他对应的验证器是什么时候注册的呢?

 可以看到max注解对应了很多class,在使用的过程中更具field的参数类型去匹配具体的class。如下所示,1是更具注解找到注册的class的集合,2是更具参数类型确定的选择哪一个

 这个是内置注解的匹配过程,自定义的注解如下,通过自定义注解的validateby拿到对应的class

 5 结论

经过上述过程,大家基本上对@validate的过程熟悉了。在dispatchServlet的过程中有一个验证的环节。验证过程一开始,肯定是更具要验证的class此处就是myRequest.class拿到字段上上面的注解。解析注解发现有@Max注解修饰,然后匹配到具体的validator.class, 通过class实例化对象去做具体的字段验证

  • 3
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值