参数校验

  • 由于前端的校验容易被跳过,所以后端也需要有一道保障
  • 这道保障就是对前端传来的参数进行校验

参数校验,只需要用到一个注解即可:@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的接口,都遵循这个校验规则

results matching ""

    No results matching ""