@ParamsValidate系列教程 https://blog.csdn.net/u010606397/article/category/7689866
一、认识"request":false
有一个House.java,House中有一个属性window,window也是一个类。如下:
public class House{
private Double area;
private String houseName;
private Window window;
省略get、set
static class Window{
private Integer windowHeight;
private Integer windowWidth;
省略get、set
}
}
需求如下:
1、window可为空
2、window不为空时,windowHeight也不能为空。
为了实现这个需求,可编写如下校验规则:
"house": {
"houseName": {
"request": true,
"maxLength": 10,
"message": "房间名称不能多于10字符"
},
"window":{
"request": false,
"windowHeight":{
"request": true,
"minValue": 1,
"maxValue": 1000,
"regex": "^(\\+)?\\d+(\\.\\d+)?$",
"message": "高度必须是数字"
},
"windowWidth":{
"minValue": 1,
"maxValue": 1000,
"regex": "^(\\+)?\\d+(\\.\\d+)?$",
"message": "宽度必须是数字"
}
}
}
注意看window的值中多加了一个键值对"request": false,这就表示window可以为空。
params-validate对多层级属性的校验规则是这样定义的:
子级有request:true,则父祖先级不能为空,除非相应的父祖先级有request:false。
所有子级都没有request:true,则父级可以为空。
我用几个校验规则的例子说明:
"house": {
"houseName": {
"request": true,
"maxLength": 10,
"message": "房间名称不能多于10字符"
},
"window":{
//window的属性windowHeight有request:true,表示windowHeight为必填,window必然不为空
"windowHeight":{
"request": true,
"minValue": 1,
"maxValue": 1000,
"regex": "^(\\+)?\\d+(\\.\\d+)?$",
"message": "高度必须是数字"
},
"windowWidth":{
"minValue": 1,
"maxValue": 1000,
"regex": "^(\\+)?\\d+(\\.\\d+)?$",
"message": "宽度必须是数字"
}
}
}
"house": {
"houseName": {
"request": true,
"maxLength": 10,
"message": "房间名称不能多于10字符"
},
"window":{
//window有"request": false,表示window可以为空。
"request": false,
"windowHeight":{
"request": true,
"minValue": 1,
"maxValue": 1000,
"regex": "^(\\+)?\\d+(\\.\\d+)?$",
"message": "高度必须是数字"
},
"windowWidth":{
"minValue": 1,
"maxValue": 1000,
"regex": "^(\\+)?\\d+(\\.\\d+)?$",
"message": "宽度必须是数字"
}
}
}
"house": {
"houseName": {
"request": true,
"maxLength": 10,
"message": "房间名称不能多于10字符"
},
"window":{
//window的子级没有request:true,即没有必填的子级。window当然可以为空咯
"windowHeight":{
"minValue": 1,
"maxValue": 1000,
"regex": "^(\\+)?\\d+(\\.\\d+)?$",
"message": "高度必须是数字"
},
"windowWidth":{
"minValue": 1,
"maxValue": 1000,
"regex": "^(\\+)?\\d+(\\.\\d+)?$",
"message": "宽度必须是数字"
}
}
}
当key对应的值是一个bean或map时,通过添加request:false可实现bean、map是否必填的校验。
二、校验Collection
校验collection,需要用到一个新的key —> elem。
简单collection校验
需求如下:
1、hobbyList最大长度是3
2、hobbyList里面的元素为必填,只能是数字
校验规则应该这么写:
"hobbyList":{
"maxLength": 3,
"elem":{
"request":true,
"maxValue": 200,
"regex": "^\\d+$",
"message": "0或正整数"
}
},
collection类型支持request,maxLenth、minLength校验,不支持maxValue、minValue、regex校验。
elem表示collection中的元素。
补充一点:请求参数只有一个,校验规则可直接使用参数的键作为json文件和@ParamsValidate的key。用一个图举例说明:
当请求参数是Collection<Collection<String>>,集合的元素还是集合,校验规则就应该这么写
"XXkey":{
.....
"elem":{
....
"elem": {
....
}
}
}
Collection元素是对象
Cate.java如下:
public class Cate {
private String cateName;
private Integer money;
省略get、set
}
需要校验List<Cate> ,校验规则可这么写:
"cateList":{
"maxLength": 3,
"elem": {
"cateName": {
"request":true,
"maxLength": 40,
"regex": "^[\\u4e00-\\u9fa5a-zA-Z-z0-9]+$",
"message": "字母数字中文"
},
"money": {
"request":true,
"maxValue": 4,
"regex": "^\\d+$",
"message": "数字"
}
}
}
教程代码 https://github.com/CodingSoldier/test-params-validate