HibernateValidator实现更简洁的参数校验及一个util

代码地址
https://github.com/wheel-organization/wheel

成都创新互联公司服务项目包括民和网站建设、民和网站制作、民和网页制作以及民和网络营销策划等。多年来,我们专注于互联网行业,利用自身积累的技术优势、行业经验、深度合作伙伴关系等,向广大中小型企业、政府机构等提供互联网行业的解决方案,民和网站推广取得了明显的社会效益与经济效益。目前,我们服务的客户以成都为中心已经辐射到民和省份的部分城市,未来相信会继续扩大服务区域并继续获得客户的支持与信任!

简介

hibernate-validator是Hibernate项目中的一个数据校验框架,是Bean Validation 的参考实现,hibernate-validator除了提供了JSR 303规范中所有内置constraint 的实现,还有一些附加的constraint。

使用hibernate-validator能够将数据校验从业务代码中脱离出来,增加代码可读性,同时也让数据校验变得更加方便、简单。

官网地址:http://hibernate.org/validator/

如何使用

项目中已经引入了需要的api,无需重复引入


  javax.validation
  validation-api
  2.0.1.Final


  org.hibernate
  hibernate-validator
  6.0.16.Final

在要校验的POJO上加上以下注解即可

注解用途
Valid递归的对关联的对象进行校验
AssertFalse用于boolean字段,该字段的值只能为false
AssertTrue用于boolean字段,该字段只能为true
DecimalMax(value)被注释的元素必须是一个数字,只能大于或等于该值
DecimalMin(value)被注释的元素必须是一个数字,只能小于或等于该值
Digits(integer,fraction)检查是否是一种数字的(整数,小数)的位数
Future检查该字段的日期是否是属于将来的日期
FutureOrPresent判断日期是否是将来或现在日期
Past检查该字段的日期是在过去
PastOrPresent判断日期是否是过去或现在日期
Max(value)该字段的值只能小于或等于该值
Min(value)该字段的值只能大于或等于该值
Negative判断负数
NegativeOrZero判断负数或0
Positive判断正数
PositiveOrZero判断正数或0
NotNull不能为null
Null必须为 null
Pattern(value)被注释的元素必须符合指定的正则表达式
Size(max, min)检查该字段的size是否在min和max之间,可以是字符串、数组、集合、Map等
Length(max, min)判断字符串长度
CreditCardNumber被注释的字符串必须通过Luhn校验算法,银行卡,信用卡等号码一般都用Luhn计算合法性
Email被注释的元素必须是电子邮箱地址
Length(min=, max=)被注释的字符串的大小必须在指定的范围内
NotBlank只能用于字符串不为null,并且字符串trim()以后length要大于0
NotEmpty集合对象的元素不为0,即集合不为空,也可以用于字符串不为null
Range(min=, max=)被注释的元素必须在合适的范围内
SafeHtmlclasspath中要有jsoup包
ScriptAssert要有Java Scripting API 即JSR 223("Scripting for the JavaTMPlatform")的实现
URL(protocol=,host=,port=,regexp=,flags=)被注释的字符串必须是一个有效的url

更多功能,如:自定义校验规则、分组校验、关联参数联合校验请查看官网或百度

Dubbo中使用Hibernate Validator校验入参

无需util,Dubbo接口配置上的validation为true即可

在客户端验证参数

服务器端验证参数


在代码里校验入参

//obj为包含Hibernate Validator注解的POJO
//快速失败模式
ValidResult validResult = ValidationUtil.fastFailValidate(obj);
//obj为包含Hibernate Validator注解的POJO
//全部校验模式
ValidResult validResult = ValidationUtil.allCheckValidate(obj);

样例

public class ParamTestDTO implements Serializable {

  private static final long serialVersionUID = 7123882542534668217L;

  @AssertTrue(message = "Error True")
  private Boolean testTrue;

  @AssertFalse(message = "Error False")
  private Boolean testFalse;

  @DecimalMax(value = "10", message = "Error StrMax")
  private String testStrMax;

  @DecimalMin(value = "1", message = "Error StrMin")
  private String testStrMin;

  @Max(value = 10, message = "Error Max")
  private Integer testMax;

  @Min(value = 1, message = "Error Min")
  private Double testMin;

  @Digits(integer = 2, fraction = 3, message = "Error Dig")
  private BigDecimal testDig;

  @Past(message = "Error Past")
  private Date testPast;

  @Future(message = "Error Future")
  private Date testFuture;

  @Null(message = "Error Null")
  private String testNull;

  @NotNull(message = "Error NonNull")
  private String testNonNull;

  @Pattern(regexp = "^[0-9]?[0-9]$", message = "Error Pattern")
  private String testPattern;

  @Size(min = 1, max = 10, message = "Error Size")
  private List testSize;

  @Length(min = 1, max = 10, message = "Error Length")
  private String testLength;

  @NotBlank(message = "Error Blank")
  private String testBlank;

  @NotEmpty(message = "Error NotEmpty")
  private String testEmpty;

  @Range(min = 1, max = 10, message = "Error Range")
  private String testRange;
}

单测:ValidationUtilTest

性能测试

结果如图:

Hibernate Validator实现更简洁的参数校验及一个util

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持创新互联。


分享标题:HibernateValidator实现更简洁的参数校验及一个util
标题链接:http://scyanting.com/article/gegjpc.html