validator

轻量级服务端校验框架

支持注解、功能齐全、使用简便

一、功能简介

主要提供便捷的后台数据校验功能,支持单个字段或参数校验,也支持通过注解校验对象,用法简单。提供基本的非空、长度、大小等校验方法,也提供一些特殊的正则校验、身份证、电话、邮箱、IP等校验方法。

二、注解介绍

@Valid 被注解的元素是一个POJO对象,用于检查此对象的所有被注解字段的值是否符合预期

Bean Validation 中内置的 constraint

注解 作用
@Null 被注解的元素必须为 null
@NotNull 被注解的元素必须不为 null
@NotBlank 被注解的元素必须不为空,并且必须包含至少一个非空白字符
@NotEmpty 被注解的元素必须非空
@AssertTrue 被注解的元素必须为 true
@AssertFalse 被注解的元素必须为 false
@Max 被注解的元素必须是一个数字,其值必须小于等于指定的最大值
@Min 被注解的元素必须是一个数字,其值必须大于等于指定的最小值
@DecimalMax 被注解的元素必须是一个数字,其值必须小于等于指定的最大值
@DecimalMin 被注解的元素必须是一个数字,其值必须大于等于指定的最小值
@Digits 被注解的元素必须是一个数字,其值必须在可接受的范围内
@Positive 被注解的元素必须是严格意义上的正数
@PositiveOrZero 被注解的元素必须是正数或0
@Negative 被注解的元素必须是一个严格意义上的负数
@NegativeOrZero 被注解的元素必须是负数或0
@Past 被注解的元素必须是过去的某个瞬间、日期或时间
@PastOrPresent 被注解的元素必须是过去或现在的某个瞬间、日期或时间
@Future 被注解的元素必须是将来的某个瞬间、日期或时间。
@FutureOrPresent 被注解的元素必须是当前或将来的某个瞬间、日期或时间。
@Size 被注解的元素的大小必须在指定的范围内
@Email 被注解的元素必须是电子邮箱地址
@Pattern 被注解的元素必须符合指定的正则表达式

Hibernate Validator 附加的 constraint

注解 作用
@Length 被注解的字符串的大小必须在指定的范围内
@Range 被注解的元素必须在合适的范围内
@URL 验证带注解的字符串是否为URL
@Currency 货币金额必须在正确的货币单位
@CreditCardNumber 带注解的元素必须表示有效的信用卡号
@CodePointLength 验证包含字符序列的代码点长度在min和max之间
@ConstraintComposition 布尔运算符,应用于组合约束注解的所有约束
@SafeHtml 验证用户提供的富文本值,以确保它不包含恶意代码,例如嵌入的<script>元素
@UniqueElements 验证所提供集合中的每个对象都是惟一的,即不能在集合中找到两个相等的元素
@EAN 检查带注解的字符序列是否是有效的EAN 13号。验证数字的长度和校验数字
@ISBN 检查带注解的字符序列是否是有效的ISBN。数字的长度和校验数字都经过验证
@LuhnCheck Luhn算法检查约束
@Mod10Check Modulo 10 检查约束
@Mod11Check Modulo 11 检查约束
@ParameterScriptAssert 方法级约束,它根据带注解的方法或构造函数计算脚本表达式
@ScriptAssert 类级约束,它根据带注解的元素计算脚本表达式

Yue Validator 附加的 constraint

注解 作用
@Cellphone 手机号校验
@IdCard 身份证校验
@PlateNumber 中国车牌号校验
@Birthday 生日校验
@Chinese 中文校验
@English 英语校验
@UUID UUID校验
@IPV4 IPV4地址校验
@IPV6 IPV6地址校验
@MacAddress MAC地址校验

三、参数验证

单个参数验证

单个参数验证

  1. import ai.yue.library.base.validation.Validator;
  2. @Autowired
  3. private Validator validator;
  4. validator.is("a").notNull();
  5. validator.is("test").maxLength(20).minLength(4);
  6. validator.is(50).min(20).max(60);

单个参数校验-通过param()连写(连写直接切换校验对象)

  1. validator.param("a").notNull().param("test").length(20, 4).param(50).min(20).max(60);

单个参数校验-自定义错误信息

  1. validator.param("test").length(20, 4, "最大长度不能超过20个字,最小长度不能少于4个字");

POJO对象校验(推荐

在类的属性上定义注解,同时支持自定义错误信息

  1. @Data
  2. public class ValidationIPO {
  3. @NotEmpty(message = "姓名不能为空")
  4. @Length(max = 20, message = "姓名不能超过20个字")
  5. private String name;
  6. private Date birthday;
  7. @IdCard
  8. private String idcard;
  9. @Max(30)
  10. @Min(12)
  11. private int age;
  12. @Email
  13. @Length(max = 50)
  14. private String email;
  15. @Cellphone
  16. private String cellphone;
  17. @Pattern(regexp = "[1-9]([0-9]{5,11})")
  18. private String qq;
  19. }

方式一:Controller层,通过注解@Valid校验(推荐)

  1. @PostMapping("/valid")
  2. public Result<?> valid(@Valid ValidationIPO validationIPO) {

方式二:通过调用validator.valid()方法

  1. validator.valid(validationIPO);
  2. // 同样支持连写
  3. validator.valid(validationIPO).param("2017-06-05").date("yyyy-MM-dd");

校验不通过时处理

校验不通过会抛出ValidateException(运行时异常),AllExceptionHandler类已默认处理,,只需开启即可获得友好提示