您好,登录后才能下订单哦!
代码地址
https://github.com/wheel-organization/wheel
简介
hibernate-validator是Hibernate项目中的一个数据校验框架,是Bean Validation 的参考实现,hibernate-validator除了提供了JSR 303规范中所有内置constraint 的实现,还有一些附加的constraint。
使用hibernate-validator能够将数据校验从业务代码中脱离出来,增加代码可读性,同时也让数据校验变得更加方便、简单。
官网地址:http://hibernate.org/validator/
如何使用
项目中已经引入了需要的api,无需重复引入
<dependency> <groupId>javax.validation</groupId> <artifactId>validation-api</artifactId> <version>2.0.1.Final</version> </dependency> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-validator</artifactId> <version>6.0.16.Final</version> </dependency>
在要校验的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计算合法性 | 
| 被注释的元素必须是电子邮箱地址 | |
| Length(min=, max=) | 被注释的字符串的大小必须在指定的范围内 | 
| NotBlank | 只能用于字符串不为null,并且字符串trim()以后length要大于0 | 
| NotEmpty | 集合对象的元素不为0,即集合不为空,也可以用于字符串不为null | 
| Range(min=, max=) | 被注释的元素必须在合适的范围内 | 
| SafeHtml | classpath中要有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即可
在客户端验证参数
<dubbo:reference id="xxxService" interface="xxx.ValidationService" validation="true" />
在服务器端验证参数
<dubbo:service interface="xxx.ValidationService" ref="xxxService" 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<String> 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
性能测试
结果如图:

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持亿速云。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。