参数校验

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

参数校验,只需要用到一个注解即可:@MarsDataCheck

在api的参数对象的字段上 加上这个注解即可

  1. // 不可为空,且长度在2-3位
  2. @MarsDataCheck(notNull = true,maxLength = 3L,minLength = 2L, msg = "id不可为空且长度必须在2-3位之间")
  3. private Integer id;
  4. // 正则校验
  5. @MarsDataCheck(reg = "^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{6,12}$",msg = "密码不可以为空且必须是6-12位数字字母组合")
  6. private String password;

属性解释

  • notNull:是否为空,设置为true说明不可为空

  • maxLength:最大长度,只有设置了notNull=true 才生效

  • minLength:最小长度,只有设置了notNull=true 才生效

  • msg:校验不通过的时候,返回前端的提示文字

  • reg:正则表达式

注意事项

  • 只支持非空验证,和正则验证,正则可以满足所有的校验规则,所以就只做了这两种
  • reg和notNull属性 最好不要并存,如果并存了,那么reg的优先级高,reg不通过就直接短路,通过了就继续校验非空

前端如何得到提示

正常请求API就好了,如果校验不通过会得到这样一个json

  1. {error_code:1128, error_info:"提示文字"}

作用域

在实际开发中,很多VO对象会被作为多个接口的接参对象,这种情况下如果在属性上加@MarsDataCheck注解,会导致所有用到这个对象的接口,都需要遵循这个校验规则。

但是实际中会出现这种情况:A接口需要这个字段非空,但是B接口又不需要非空。

这个时候,就需要作用域了。举个例子:

有一个VO对象

  1. public class ExpVO {
  2. private String name;
  3. private String address;
  4. }

有三个接口用它作为接参对象【注意看注释】

  1. @MarsApi(refBean = "expApiService")
  2. public interface ExpApi {
  3. // 这个接口name不可以为空,address可以为空
  4. List<ExpVO> expGetRequest(ExpVO expVO);
  5. // 这个接口name和address都不可以为空
  6. @RequestMethod(ReqMethod.POST)
  7. List<ExpVO> expPostRequest(ExpVO expVO);
  8. // 这个接口address不可以为空,name可以为空
  9. @RequestMethod(ReqMethod.POST)
  10. List<ExpVO> saveRequest(ExpVO expVO);
  11. }

我们可以用如下方式来设置ExpVo的属性校验【注意看注释】

在@MarsDataCheck注解里设置api属性

  1. public class ExpVO {
  2. /*
  3. * expGetRequest 和 expPostRequest两个接口都不允许name为空
  4. * 只需要在apis属性里配置这两个接口即可,但是由于他们都是exp开头的
  5. * 所以用通配符即可
  6. */
  7. @MarsDataCheck(notNull = true, msg = "名称不可以为空", apis={"exp*"})
  8. private String name;
  9. /*
  10. * saveRequest 和 expPostRequest两个接口都不允许address为空
  11. * 只需要在apis属性里配置这两个接口即可
  12. */
  13. @MarsDataCheck(notNull = true, msg = "地址不可以为空", apis={"expPostRequest","saveRequest"})
  14. private String address;
  15. }

注:

  • 如上面示例所示,api属性支持配置多个接口名,同时也支持通配符
  • apis属性如果不配置,则表示任意使用该VO的接口,都遵循这个校验规则