# agile-validate
**Repository Path**: sdwl_git/agile-validate
## Basic Information
- **Project Name**: agile-validate
- **Description**: 参数验证器
注解形式声明方法入参验证
POJO类型参数验证
基本类型参数验证
自定义验证规则
支持验证场景
集合类型参数验证
自定义错误消息与国际化消息
- **Primary Language**: Java
- **License**: Apache-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 2
- **Created**: 2020-12-14
- **Last Updated**: 2020-12-19
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# agile-validate : 参数验证器
[](https://img.shields.io/badge/hibernate--validator-LATEST-green)
[](https://img.shields.io/badge/build-maven-green)
## 它有什么作用
* **注解形式声明方法入参验证**
* **POJO类型参数验证**
* **基本类型参数验证**
* **自定义验证规则**
* **支持验证场景**
* **集合类型参数验证**
* **自定义错误消息与国际化消息**
* **自定义业务验证**
-------
## 快速入门
开始你的第一个项目是非常容易的。
#### 步骤 1: 下载包
您可以从[最新稳定版本]下载包(https://github.com/mydeathtrial/agile-validate/releases).
该包已上传至maven中央仓库,可在pom中直接声明引用
以版本agile-validate-2.0.8.jar为例。
#### 步骤 2: 添加maven依赖
```xml
cent
https://repo1.maven.org/maven2/
cloud.agileframework
agile-validate
2.0.8
```
#### 步骤 3: 开箱即用
##### 注解
用于要进行参数验证的方法,声明参数验证规则
```
1、com.agile.common.annotation.Validate,支持多注解
2、com.agile.common.annotation.Validates,可包含多Validate
```
例子:
```java
@Validate(value = "param1", validateType = ValidateType.EMAIL)
@Validate(value = "param1", validateRegex = "[\\d]+",validateMsg = "必须是数字")
@Validate(value = "param2", nullable = false, validateMsgKey = "messageKey", validateMsgParams = "cu")
@Validate(value = "params.param1.param2", nullable = false, validateMsg = "自定义错误")
@Validate(value = "param3", beanClass = Ob.class, validateGroups = {Group1.class})
@Validate(value = "a",customBusiness = {CustomValidate.class})
public void yourMethod(...) {
...
}
//获取参数校验结果
List result = ValidateUtil.handleInParamValidate(getMethod("yourMethod"), param);
//验证结果聚合,同一个参数如果经过多个验证环节,可能产生多种错误,该方法可将同参数验证结果进行聚合
List result = ValidateUtil.aggregation(result);
```
##### 调用
获取验证结果,工具类cloud.agileframework.validate.ValidateUtil
```java
/**
* 方法入参验证
*
* @param method 方法
* @param params 参数集
* @return 验证信息集,包含正确与错误的所有入参验证结果,包括参数名、参数值、错误信息
*/
public static List handleInParamValidate(Method method,Object params)
/**
* 参数校验信息根据相同参数聚合错误信息
*
* @param list 聚合之前的错误信息
* @return 聚合后的信息,过滤掉正确参数,重复的参数验证结果合并为一个,对应的错误消息合并
*/
public static List aggregation(List list)
```
注解参数说明:
```java
public @interface Validate {
/**
* 参数名
*/
String value() default "";
/**
* 内置验证类型,如邮箱、电话号、浮点数、域名、ip等等
*/
ValidateType validateType() default ValidateType.NO;
/**
* 自定义验证正则
*/
String validateRegex() default "";
/**
* 验证失败后的错误消息
*/
String validateMsg() default "";
/**
* 验证失败后的错误消息的国际化messages_*.properties中的key值
* 需要配合spring message使用
*/
String validateMsgKey() default "";
/**
* 验证失败后的错误消息的国际化messages_*.properties中的{n}占位参数
* 需要配合spring message使用
*/
String[] validateMsgParams() default {};
/**
* 配合beanClass参数使用,对应功能为hibernate-validate的group场景,使用方式不变
*/
Class[] validateGroups() default {};
/**
* 对应功能为hibernate-validate方式的pojo验证,对应的beanClass属性中应该包含hibernate-validate注解
*/
Class> beanClass() default Class.class;
/**
* 能否为null,默认可以
*/
boolean nullable() default true;
/**
* 能够为空字符串,默认为可以
*/
boolean isBlank() default true;
/**
* 数字类型参数的最大值
*/
double max() default Double.MAX_VALUE;
/**
* 数字类型参数的最小值
*/
double min() default Integer.MIN_VALUE;
/**
* 最大长度
*/
int maxSize() default Integer.MAX_VALUE;
/**
* 最小值
*/
int minSize() default -1;
/**
* 自定义业务验证过程
*/
Class extends ValidateCustomBusiness>[] customBusiness() default {};
}
```
验证结果(例)
```json
[
{
"item":"param1",
"itemValue":"a",
"message":"不符合邮箱格式;必须是数字",
"state":false
},
{
"item":"param3",
"itemValue":"b1",
"message":"错了吧",
"state":false
},
{
"item":"params.param1.param2",
"message":"自定义错误",
"state":false
},
{
"item":"param2",
"message":"errorcu",
"state":false
}
]
```
##### 自定义业务代码验证
```java
//使用注解中的customBusiness属性,声明要使用的"业务验证类","业务验证类"必须实现ValidateCustomBusiness接口
//该属性支持声明多个"业务验证类",验证组件调用"业务验证类"的validate方法时,会有限尝试使用spring托管的bean去调用
//当bean不存在时将自动创建"业务验证类"对象调用。所以"业务验证类"中支持使用任何spring的所有功能。
@Validate(value = "paramKey",customBusiness = {CustomValidate.class})
public void yourMethod() {
}
//自己定义的"业务验证类"
public class CustomValidate implements ValidateCustomBusiness {
@Override
public List validate(Object params) {
//自定义的参数验证环节,举例...
ValidateMsg validateMsg = new ValidateMsg();
validateMsg.setItem("paramKey");
validateMsg.setItemValue(params);
validateMsg.setMessage("业务验证出错了");
validateMsg.setState(false);
return Collections.singletonList(validateMsg);
}
}
```