快速上手-权限校验
2023-09-10
本节中将会介绍如何使用工具类简化参数的校验
常用校验函数
工具类的类名为SVU(SimpleValidateUtils)
//传入多个参数,若存在null值则返回false
public static boolean notNull(Object ...args);
//判断base是否在start与end之间(包含等于start或end),成立则返回true
public static boolean range(Integer base, Integer start, Integer end);
//判断字符串content的长度是否在start与end之间(包含等于start或end),成立则返回true
public static boolean lengthRange(String content, Integer start, Integer end);
//判断content 是否符合regex的正则校验,符合返回true
public static boolean pattern(String content, String regex);
//当多个参数中存在false则返回false
public static boolean notFalse(boolean ...args);
多个参数校验
可以使用notFalse函数将多个判断条件连接起来,当其中一个
public Boolean fillUser(User user){
return SVU.notFalse(
SVU.lengthRange(user.getName(), 5, 16),
SVU.range(user.getAge(), 1, 99)
);
}
快捷抛出异常
SVU类的大多数函数都有一个功能相同的带有message的函数,带有message的函数在校验失败后不返回false而是抛出ValidateException
,并将传入的message封装到异常中。
public Boolean fillUser(User user){
return SVU.notFalse(
SVU.lengthRange("昵称长度不符合5-16",user.getName(), 5, 16),
SVU.range("年龄只能为1-99", user.getAge(), 1, 99)
);
}
可以捕获异常处理验证信息
//全局捕获异常并返回异常信息
@ControllerAdvice
public class MyExceptionHandler {
@ExceptionHandler(value = ValidateException.class)
@ResponseBody
public String exceptionHandler(ValidateException e){
return e.getMessage();
}
}
使用延迟函数提高效率
为实现notFalse函数的短路判断,建议在notFalse中使用延迟函数。
例如:
public Boolean fillUser(User user){
return SVU.notFalse(
SVU.lengthRangeDelay(user.getName(), 5, 16),
SVU.rangeDelay(user.getAge(), 1, 99)
);
}
或
//判断用户名是否在5-16之间,且不等于“CodingCube”
public Boolean fillUser(User user){
return SVU.notFalse(
SVU.lengthRangeDelay(user.getName(), 5, 16),
()->{
return "CodingCube".equals(user.getName());
}
);
}
当第一个lengthRangeDelay
函数校验返回false后第二个rangeDelay
则不会运行直接返回false;
可为空的参数校验
若部分需要校验的参数可为空,若不为空需要校验是否符合要求,则可以使用SVOU
类(SimpleValidateOptionalUtil)。
SVOU类中的函数名和SVU中的相同,只是当传入的参数为null时返回true
示例:电话为可选项,传入后不为null则需要校验是否合法
public Boolean fillUser(User user){
//Regex类提供了常用正则表达式
SVOU.pattern(user.getPhone(), Regex.CHINESE_MOBIL_PHONE_NUMBER);
return SVU.notFalse(
SVU.lengthRangeDelay(user.getName(), 5, 16),
SVU.rangeDelay(user.getAge(), 1, 99)
);
}