Hibernate Validator实现更简洁的参数校验及一个util
程序员文章站
2023-12-01 12:35:04
代码地址
简介
hibernate-validator是hibernate项目中的一个数据校验框架,是bean validation 的参考实现,hiber...
代码地址
简介
hibernate-validator是hibernate项目中的一个数据校验框架,是bean validation 的参考实现,hibernate-validator除了提供了jsr 303规范中所有内置constraint 的实现,还有一些附加的constraint。
使用hibernate-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
性能测试
结果如图:
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。