参数校验
- 由于前端的校验容易被跳过,所以后端也需要有一道保障
- 这道保障就是对前端传来的参数进行校验
参数校验,只需要用到一个注解即可:@MarsDataCheck
在api的参数对象的字段上 加上这个注解即可
// 不可为空,且长度在2-3位
@MarsDataCheck(notNull = true,maxLength = 3L,minLength = 2L, msg = "id不可为空且长度必须在2-3位之间")
private Integer id;
// 正则校验
@MarsDataCheck(reg = "^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{6,12}$",msg = "密码不可以为空且必须是6-12位数字字母组合")
private String password;
属性解释
notNull:是否为空,设置为true说明不可为空
maxLength:最大长度,只有设置了notNull=true 才生效
minLength:最小长度,只有设置了notNull=true 才生效
msg:校验不通过的时候,返回前端的提示文字
reg:正则表达式
注意事项
- 只支持非空验证,和正则验证,正则可以满足所有的校验规则,所以就只做了这两种
- reg和notNull属性 最好不要并存,如果并存了,那么reg的优先级高,reg不通过就直接短路,通过了就继续校验非空
前端如何得到提示
正常请求API就好了,如果校验不通过会得到这样一个json
{error_code:1128, error_info:"提示文字"}
作用域
在实际开发中,很多VO对象会被作为多个接口的接参对象,这种情况下如果在属性上加@MarsDataCheck注解,会导致所有用到这个对象的接口,都需要遵循这个校验规则。
但是实际中会出现这种情况:A接口需要这个字段非空,但是B接口又不需要非空。
这个时候,就需要作用域了。举个例子:
有一个VO对象
public class ExpVO {
private String name;
private String address;
}
有三个接口用它作为接参对象【注意看注释】
@MarsApi(refBean = "expApiService")
public interface ExpApi {
// 这个接口name不可以为空,address可以为空
List<ExpVO> expGetRequest(ExpVO expVO);
// 这个接口name和address都不可以为空
@RequestMethod(ReqMethod.POST)
List<ExpVO> expPostRequest(ExpVO expVO);
// 这个接口address不可以为空,name可以为空
@RequestMethod(ReqMethod.POST)
List<ExpVO> saveRequest(ExpVO expVO);
}
我们可以用如下方式来设置ExpVo的属性校验【注意看注释】
在@MarsDataCheck注解里设置api属性
public class ExpVO {
/*
* expGetRequest 和 expPostRequest两个接口都不允许name为空
* 只需要在apis属性里配置这两个接口即可,但是由于他们都是exp开头的
* 所以用通配符即可
*/
@MarsDataCheck(notNull = true, msg = "名称不可以为空", apis={"exp*"})
private String name;
/*
* saveRequest 和 expPostRequest两个接口都不允许address为空
* 只需要在apis属性里配置这两个接口即可
*/
@MarsDataCheck(notNull = true, msg = "地址不可以为空", apis={"expPostRequest","saveRequest"})
private String address;
}
注:
- 如上面示例所示,api属性支持配置多个接口名,同时也支持通配符
- apis属性如果不配置,则表示任意使用该VO的接口,都遵循这个校验规则