核查框架新的选择
该框架是对象的属性核查框架。直接对标jsr-303,但是却不是jsr-303的扩展实现版本(jsr-303用的最多的就是hibernate.validate),比起该hibernate,新的框架是从业务出发,功能更多,使用和扩展更简单。
秉承大道至简的思想,引入核查器和匹配器机制,可以将各种复杂的匹配变得特别简单。核查器为内置的两种:黑名单和白名单。而匹配器针对各种类型的设定不同匹配策略。大部分的匹配都是基于基本的类型,而复杂类型(集合、map或者自定义类型)又都是由基本类型组成的。框架支持对复杂类型会进行拆解并核查内部的匹配类型进而对复杂类型进行拦截。该框架具有以下特性:
功能性:
全类型:可以核查所有类型,基本类型,复杂类型,集合和Map等各种有固定属性(泛型暂时不支持)的类型
匹配器:对类型的匹配机制:分组、值列表、属性class、指定模型类型、正则表达式、系统回调(扩展)、枚举类型、范围判决(支持时间范围)和表达式语言判决
黑白机制:匹配完之后,数据是拒绝还是接收。接收表示只接收匹配的值,为白名单概念。拒绝表示只拒绝匹配的值,为黑名单概念
非功能性:
零侵入:对代码零侵入,仅作为一个工具类存在
易使用:使用超级简单,一个类,两类核查器,三个注解,多种匹配器
高性能:所有的核查均是内存直接调用,第一次构建匹配树后,后面就无须重建
可扩展:针对一些不好核查的属性,可以通过自定义匹配器属性,也可以使用spring的Bean作为系统匹配器类
使用文档
文档:Mikilin文档
github: https://github.com/SimonAlong/Mikilin
一、快速入门
本工具用法极其简单,可以说,只要会用一个注解Matcher
和一个方法MkValidators.check(Object obj)
即可。Matcher
表示匹配器,内部根据accept区分白名单和黑名单,就是只要匹配到注解中的属性,则表示当前的值是可以通过的,否则函数MkValidators.check(Object obj)
返回失败,并通过MkValidators.getErrMsgChain
获取所有错误信息或者通过MkValidators.getErrMsg
获取某一项错误信息。
maven引入
已发布到中央仓库,可自行获取
使用
该框架使用极其简单(直接参考spring-validate框架用法即可),如下:给需要拦截的属性添加注解即可
硬编码
在拦截的位置添加核查,这里是做一层核查,在业务代码中建议封装到aop中对业务使用方不可见即可实现拦截
自动核查
版本:>= 1.6.0 在1.6.0版本中添加@AutoCheck
注解,修饰类和方法,会自动核查方法或者类的方法中的参数,不符合需求,则会上报异常MkException
用法
二、常见场景用法
以下场景均来自实际业务场景
1.字段不可为空
用户id不可为空
2.字符串属性不可为空
用户名不可为空
3.类型只可为0和1
对应属性的类型,只可为两个值,或者多个值
4.类型为多个固定的值
对应属性的状态,只可为0、1、2、3、4、5、6、7中的一个
5.对应的值为邮箱
字段为邮箱判断。除了邮箱之外,还有手机号、固定电话、身份证号和IP地址这么四个固定的类型判断。
6.对应集合的长度
前端上传的图片最多为三个
7.字符长度最长为128
对前端传递过来的字符长度限制为128,因为数据库字段存储为最长128
8.数据为空或者不空的话,长度不能超过200
其中@Matcher内部多个属性之间的匹配是或的关系
9.前端传递过来的id必须在db中存在,而且数据不可为空
@Matcher支持多个叠加形式,表示多个条件的与操作
其中匹配的写法
10.项目名不可为空,而且数据库中不能存在,如果存在则拒绝
其中属性accept表示如果前面的条件匹配则拒绝,默认为true
11.在某个配置项下对应的字段值
业务场景:在字段为1的时候,另外一个对应的字段不可为空
12.时间必须是过去的时间
13.分页数据必须满足>0
14.【复杂场景】应用id在不同的场景下处理方式不同
在启动构建时候,状态必须在“开始”阶段
在测试完成动作,状态必须在‘测试中’阶段
在启动发布动作,状态必须在“测试完成”阶段
在停止动作,状态必须在“部署”状态之前
退出动作,要保证应用在“部署”状态之前
此外最基本的就是应用id不可为空,而且在db中必须存在。上面的几个动作都是不同的接口,但是所有的参数都相同,那么用group是最好的方式。其中group里面可以添加多个分组,其中group相同的,则表示两个@Mather之间是与的关系
对应的接口使用
详细介绍
对于详细内容介绍,请见文档Mikilin说明文档
技术公众号:
版权声明: 本文为 InfoQ 作者【柿子】的原创文章。
原文链接:【http://xie.infoq.cn/article/62a4249ec026a9db2505de265】。
本文遵守【CC BY-NC-SA】协议,转载请保留原文出处及本版权声明。
评论