dawdler-client-plug-validator
模块介绍
是一个强大的前后端通用校验器,支持js和java后端通用表达式校验,支持扩展,支持后端校验规则生成前端表达式,java后端支持分组,继承,排除等特性,js支持校验扩展,各种事件扩展.
1. pom中引入依赖
<groupId>club.dawdler</groupId>
<artifactId>dawdler-client-plug-validator</artifactId>
2. 接入方式
2.1 查看系统支持的验证规则
通过调用RuleOperatorProvider的静态方法help可以查看目前系统内支持的规则(包含自定义扩展).
以下是系统自带的一些校验规则,能够满足绝大部分验证需求.
#stringRule list 字 符类验证规则
状态码:[ date ] 日期验证
状态码:[ chineseWords ] 中文字母验证
状态码:[ realNumber ] 实数验证
状态码:[ IDCard ] 身份证验证
状态码:[ lowercaseLetters ] 小写字母验证
状态码:[ negativeNumber ] 负整数验证
状态码:[ positiveNumber ] 正整数验证
状态码:[ webSite ] 网址验证
状态码:[ number ] 整数验证
状态码:[ regularCharacter ] 汉字字母或数字验证
状态码:[ natureNumber ] 自然数验证
状态码:[ capitalLetters ] 大写字母验证
状态码:[ phone ] 座机验证
状态码:[ notEmpty ] 不能为空验证
状态码:[ englishWords ] 英文字母验证
状态码:[ cellPhone ] 手机号验证
状态码:[ email ] 邮箱验证
#regexRule list 正则类验证规则
状态码:[ ^contain:\[(.+)\]$ ] 规定性范围内包含验证,如:contain:[China,1] ,表单中必须出现China或1 !
状态码:[ ^minNumber:([-+]?\d+(\.\d+)?$) ] 最小数值不能小于指定数字如:minNumber:25或minNumber:25.32!
状态码:[ ^maxSize:([1-9]{1}\d*$) ] 字符串或数组中的字符串的长度不能大于指5定长度,如:maxSize:32!
状态码:[ ^maxSelect:([1-9]{1}\d*$) ] 最大选择数或最大参数个数或List或数组的长度不能大于指定数字如:maxSelect:3!
状态码:[ ^minSelect:([1-9]{1}\d*$) ] 最大选择数或最小参数个数或List或数组的长度不能小于指定数字如:minSelect:3!
状态码:[ ^noContain:\[(.+)\]$ ] 规定性范围内不包含验证,如:noContain:[China,1] ,表单中不能出现China或1 !
状态码:[ ^maxNumber:([-+]?\d+(\.\d+)?$) ] 最大数值不能大于指定数字如:maxNumber:25或maxNumber:25.32!
状态码:[ ^minSize:([1-9]{1}\d*$) ] 字符串或数组中的字符串的长度不能小于指定长度,如:minSize:3!
2.2 配置验证器
在controller同级目录创建一个{controllerName}-validator.xml结尾的文件.
验证器支持对 application/x-www-form-urlencoded、multipart/form-data、application/json(@RequestBody)、http-header(@RequestHeader)、antPath中的@PathVariable变量进行校验.
示例 :
定义UserController.java,UserController-validator.xml.
UserController-validator.xml 内容:
<?xml version="1.0" encoding="UTF-8" ?>
<validator><!-- 根节点 -->
<validator-fields><!--定义控件信息的根节点-->
<validator-field name="userid" explain="用户Id">
<![CDATA[notEmpty&positiveNumber]]>
</validator-field><!-- 控件信息节点,@name 控件名称 @explain 控件描述 @globalRules 放置的是全局别名配置文件中的key 如果填写则和本控件内的验证规则进行组合(@globalRules 需求很少不容易理,解所以废弃了 ) . <![CDATA[]]> 为验证规则,其中的内容为系统内支持的规则(包含自定义扩展) -->
<validator-field name="username" explain="用户名">
<![CDATA[notEmpty&maxSize:32]]>
</validator-field>
<validator-field name="password" explain="密码">
<![CDATA[notEmpty&maxSize:32]]>
</validator-field>
<validator-field name="age" explain="年龄">
<![CDATA[positiveNumber]]>
</validator-field>
<validator-field name="platform" explain="平台">
<![CDATA[notEmpty&positiveNumber]]>
</validator-field>
</validator-fields>
<validator-fields-groups><!-- 控件信息组 -->
<!-- 控件信息组,如果同一个Controller里 有多个api都需要验证某些控件信息 则可以建立一个组,分别refgid这个组id即可.
组之间也可以refgid引用,如果涉及相互依赖问题,系统会提醒错误! -->
<validator-fields-group id="add"><!-- 控件信息组节点 @id 组的标识id,供其他组或mapping验证器进行引用 -->
<validator ref="userid"/><!-- 组内控件 @ref 引入validator-field中的定义.
如果不存在则到全局global-validator.xml中引用,@refgid 引入其它组,@ref与@refgid可以并存. -->
<validator refgid="edit"/>
</validator-fields-group>
<validator-fields-group id="edit">
<validator ref="username"/>
<validator ref="password"/>
<validator ref="age"/>
</validator-fields-group>
</validator-fields-groups>
<validator-mappings><!-- 验证器组 -->
<validator-mapping name="/user/regist"><!-- 验证器 @name 请求的URI RequestMapping中定义的具体api地址.
注意:如果类上有RequestMapping定义,需要将类上的RequestMapping中的value与方法上的RequestMapping中的value整合到一起.
@skip为跳过某些验证,支持跳过多个规则,可以用 , 英文逗号隔开,里面写入的为validator-field的@name -->
<validator refgid="add" skip="age,username"/> <!-- 跳过了age和username的验证 -->
</validator-mapping>
<validator-mapping name="/user/edit">
<validator refgid="edit"/>
<validator ref="platform" type="header"/><!-- type为类型 支持 param(默认不填时为param 标准的http请求参数)、header(@RequestHeader)、body(@RequestBody)、path(@PathVariable). -->
</validator-mapping>
</validator-mappings>
<global-validator><!-- 全局验证器, 本Controller下的任何请求方法全部验证 一般不常用 -->
<validator ref="userid"/><!-- 描述:全局验证的控件 @ref 引入validator-field中@name 就包含了此控件 @refgid 引入其它组(等于包含作用) -->
<validator ref="platform" type="header"/><!-- type为类型 支持 param(默认不填时为param 标准的http请求参数)、header(@RequestHeader)、body(@RequestBody)、path(@PathVariable). -->
</global-validator>
</validator>
3. 后台校验配置说明
3.1 validate-global-variable.properties 全局验证规则变量(需求很少不容易理,解所以废弃了.)
用于定义全局验证规则变量的配置文件
nm32=notEmpty&maxSize:32
以上定义了全局的规则名字为nm32,规则为notEmpty不允许为空,maxSize:32最大长度不能大于32位字符.
可以随意组装任何系统内提供的或扩展的规则,通过&符号连接即可.
使用globalRules属性来引用全局验证规则变量
3.2 global-validator.xml 说明(需求很少不容易理,解所以废弃了.)
用于定义全局验证规则的配置文件,全局验证规则可以通过validator-fields-group来引用,也可以通过validator-mapping来引用.
示例:
```xml
<global-validator>
<validator-fields>
<validator-field name="username" explain="用户名" globalRules="nm32"></validator-field>
<validator-field name="email" explain="邮箱" rules="email" globalRules="nm32"></validator-field>
<validator-field name="phone" explain="电话" rules="phone"></validator-field>
</validator-fields>
</global-validator>
以上示例定义了 username,email,phone三个控件的验证规则.
username控件名的规则,使用了globalRules,nm32为validate-global-variable.properties定义的nm32.
email控件名的规则,使用了globalRules,nm32为validate-global-variable.properties定义的nm32.