Skip to main content

参数校验器

应用开发经常会遇到需要对输入进行校验的场景,下面是本框架提供的两种便捷的参数校验方式:

Assert断言#

Assert断言有许多校验方法可供选择,这些方法最后2个参数是用于组装断言失败的提示信息,前面的参数用于校验器判断入参。

  • isNull 用于断言参数为Null,如果不为Null则抛出异常信息message
  • notNull 用于断言参数不为Null,如果为Null则抛出异常信息message
  • isTrue 用于断言参数为True,如果不为True则抛出异常信息message
  • notTrue 用于断言参数不为True,如果为True则抛出异常信息message
  • notEmpty 用于断言Map,Array[],Collection,Number,String类型的参数不为空,如果为空则抛出异常信息message
  • noNullElements 用于断言Map,Array[],Collection类型的参数不存在值为Null的元素,如果存在Null元素则抛出异常信息message,注意只判断容器的元素,容器本身为Null不做处理
  • doesNotContain 用于断言Map,Array[],Collection,String类型参数不包含某个元素或值,如果包含则抛出异常信息message
  • contains 用于断言Map,Array[],Collection,String类型参数包含某个元素或值,如果不包含则抛出异常信息message
  • matches 用于断言参数可以通过regex正则表达式校验,如果不能通过校验则抛出异常信息message
  • equals 用于断言两个参数相同或相等,如果不相等则抛出异常信息message
  • notEqual 用于断言两个参数不相同或不相等,如果相等则抛出异常信息message
  • maxLength 用于断言Map,Array[],Collection,String类型参数的元素个数或长度小于max最大值,否则抛出异常信息message
  • minLength 用于断言Map,Array[],Collection,String类型参数的元素个数或长度大于min最小值,否则抛出异常信息message
  • lessThan 用于断言int,long,float,double,byte,short等数值类型参数小于max最大值,否则抛出异常信息message
  • greaterThan 用于断言int,long,float,double,byte,short等数值类型参数大于min最小值,否则抛出异常信息message
  • isChinese 用于断言字符串中全部为中文字符,否则抛出异常信息message
  • isEnglish 用于断言字符串中全部为26个字母的英文字符,否则抛出异常信息message
  • isMobile 用于断言字符串为有效的手机号码,否则抛出异常信息message
  • isEmail 用于断言字符串为有效的email邮箱地址,否则抛出异常信息message
  • isDate 用于断言字符串为指定的日期格式,否则抛出异常信息message
  • isIp 用于断言字符串为IPv4地址格式,否则抛出异常信息message
  • hasText 用于断言给定的值为字符串且不为空,否则抛出异常信息message
  • hasLength 用于断言给定的值为字符串且有内容(包括空格),否则抛出异常信息message
  • instanceOf 用于断言目标对象不为空且为指定的类型,否则抛出异常信息message
  • assignable 用于断言目标类不为空且为指定类型或其子类,否则抛出异常信息message
  • isIdCard 用于断言字符串为中国身份证格式,否则抛出异常信息message

请看下面的例子:

@RequestMapping("/")
public class ValidatorController extends Controller {
@Autowired
private CalculatorService calculator;
@RequestMapping
public Result<Integer> add() {
int a = Assert.notNull(getParamToInt("a"), "a is required and it must be an integer");
int b = Assert.notNull(getParamToInt("b"), "b is required and it must be an integer");
return Success.of(calculator.addFunction(a, b));
}
}

Assert断言还有更多用法,以上只列举部分重点内容。后续逐步完善更多具体的文档,并对重点内容进行专题描述。

Validator校验器#

Validator校验器继承自Jfinal,属于Controller的拦截器,只能搭配Controller使用。通常Controller需要校验入参的Action都需要一个校验器,校验器需要继承自Validator,请看下面的例子:

public class FirstValidator extends Validator {
@Override
protected void validate(Controller c) {
validateInteger("a", "msg", "a is required and it must be an integer");
validateInteger("b", "msg", "b is required and it must be an integer");
}
@Override
protected void handleError(Controller c) {
// 这里可以是Json或搭配html模版等各种方式配合前端
c.renderJson(getError());
}
}

然后,需要在Controller中对应的Action上面通过@Before(FirstValidator.class)注解方式开启校验器。请看下面的应用方式:

@RequestMapping("/")
public class ValidatorController extends Controller {
@Autowired
private CalculatorService calculator;
@RequestMapping
@Before(FirstValidator.class)
public Result<Integer> subtract() {
int a = getParamToInt("a");
int b = getParamToInt("b");
return Success.of(calculator.subtractFunction(a, b));
}
}

Validator校验器还有更多用法,以上只列举部分重点内容。后续逐步完善更多具体的文档,并对重点内容进行专题描述。