@ParamsValidate 三 Collection、复杂参数校验

@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

params-validate项目地址   github   码云  

发布了51 篇原创文章 · 获赞 14 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/u010606397/article/details/86583558