在日常开发中,肯定是需要对参数进行校验,以保证业务逻辑能顺利执行下去,比如参数值必须大于0,不能为空等。平时多数研发的开发习惯是if else,但是参数如果较多,代码量多不太好看。
Guava 提供了一系列的静态方法用于校验函数和类的构造器是否符合预期, 并称其为前置条件(preconditions). 如果前置条件校验失败, 就会抛出一个指定的异常.这种方式就比较优雅了
例:之前是if else的方式
@RequestMapping(value = "/workbench/query/user/list", method = RequestMethod.GET)
@ResponseBody
public Result workbenchCustomerStastics(String day,String name,Integer age,Integer sex,Integer type ) {
if(StringUtils.isBlank(day)){
return Result.getResultError("查询条件不能为空");
}
if(StringUtils.isBlank(name)){
return Result.getResultError("名称不能为空");
}
if(age==null||age<=0){
return Result.getResultError("年龄校验错误,年龄必须大于0");
}
if(sex==null||sex!=1||sex!=0){
return Result.getResultError("性别校验错误");
}
if(type==null){
return Result.getResultError("类型不能为空");
}
}
使用Preconditions之后
@RequestMapping(value = "/workbench/query/user/list", method = RequestMethod.GET)
@ResponseBody
public Result workbenchCustomerStastics(String day,String name,Integer age,Integer sex,Integer type ) {
Preconditions.checkArgument(!StringUtils.isBlank(day),"查询条件不能为空");
Preconditions.checkArgument(!StringUtils.isBlank(name),"名称不能 为空");
Preconditions.checkArgument(age!=null&&age>0,"年龄校验错误,年龄必须大于0");
Preconditions.checkArgument(!(sex==null||sex!=1||sex!=0)),"性别校验错误");
Preconditions.checkNotNull(type,"类型不能为空");
}
Preconditions提供checkArgument, checkArgument, checkState等校验方式,每个验证方法都有多个重载,异常信息也是可以用占位符的,如:
public static void checkArgument(boolean expression);
public static void checkArgument(boolean expression, @Nullable Object errorMessage);
public static void checkArgument(boolean expression,@Nullable String errorMessageTemplate,@Nullable Object... errorMessageArgs)
用于参数校验只需要Preconditions这个类就可以了,里面还有很多其他的方法,有兴趣的童鞋可以看源码,很简单就能使用