摘要:代码地址简介是项目中的一个数据校验框架,是的参考实现,除了提供了规范中所有内置的实现,还有一些附加的。使用能够将数据校验从业务代码中脱离出来,增加代码可读性,同时也让数据校验变得更加方便简单。
代码地址
https://github.com/wheel-orga...简介
hibernate-validator是Hibernate项目中的一个数据校验框架,是Bean Validation 的参考实现,hibernate-validator除了提供了JSR 303规范中所有内置constraint 的实现,还有一些附加的constraint。
使用hibernate-validator能够将数据校验从业务代码中脱离出来,增加代码可读性,同时也让数据校验变得更加方便、简单。
官网地址:http://hibernate.org/validator/
如何使用项目中已经引入了需要的api,无需重复引入
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计算合法性 |
被注释的元素必须是电子邮箱地址 | |
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即可
在客户端验证参数
在服务器端验证参数
在代码里校验入参
//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 ListtestSize; @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
性能测试结果如图:
HV000183: Unable to initialize "javax.el.ExpressionFactory". Check that you have the EL dependencies on the classpath, or use ParameterMessageInterpolator instead
原因:没有引入javax.el或者javax.el版本冲突
解决:
没有引入的话引入
org.glassfish javax.el 3.0.1-b09
如果版本冲突的话先尝试去除依赖,或者换个低版本的hibernate-validator
org.hibernate hibernate-validator 4.2.0.Final
参考解决
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/77675.html
摘要:前言最近在开发某个模块的功能时,里面包含大量对请求参数判空和验证的步骤且参数繁多,存在大量的重复判断,验证影响代码的美观遂决定优化这部分代码。 前言 最近在开发某个模块的功能时,里面包含大量对请求参数判空和验证的步骤且参数繁多,存在大量的重复判断,验证影响代码的美观遂决定优化这部分代码。SpringBoot自带了参数验证框Hibernate Validator,下面是自己的学习笔记。 ...
摘要:前言最近在开发某个模块的功能时,里面包含大量对请求参数判空和验证的步骤且参数繁多,存在大量的重复判断,验证影响代码的美观遂决定优化这部分代码。 前言 最近在开发某个模块的功能时,里面包含大量对请求参数判空和验证的步骤且参数繁多,存在大量的重复判断,验证影响代码的美观遂决定优化这部分代码。SpringBoot自带了参数验证框Hibernate Validator,下面是自己的学习笔记。 ...
摘要:所以就有今天的话题利用注解对进行校验。利用注解对进行校验,主要是利用框架,实现了的接口关于校验的接口,直接使用非常方便,省时省力。 最近写业务代码,因为页面复杂,导致对应的Bean属性非常多,而产品大佬又提出各种校验要求。 emmmmmm......如果写if条件来校验,那简直是又臭又长。 所以就有今天的话题——利用注解对Bean进行校验。 利用注解对Bean进行校验,主要是利用hib...
摘要:在开发服务器端代码时,我们会遇到对外部传来的参数合法性进行验证,而提供了一些常用的参数校验注解,我们可以拿来使用。 在开发JAVA服务器端代码时,我们会遇到对外部传来的参数合法性进行验证,而hibernate-validator提供了一些常用的参数校验注解,我们可以拿来使用。1.maven中引入hibernate-validator对应的jar: org.hibernate ...
摘要:时间年月日星期三说明使用规范校验接口请求参数源码第一章理论简介背景介绍如今互联网项目都采用接口形式进行开发。该规范定义了一个元数据模型,默认的元数据来源是注解。 时间:2017年11月08日星期三说明:使用JSR303规范校验http接口请求参数 源码:https://github.com/zccodere/s... 第一章:理论简介 1-1 背景介绍 如今互联网项目都采用HTTP接口...
阅读 3435·2021-11-25 09:43
阅读 982·2021-11-15 11:36
阅读 3281·2021-11-11 16:54
阅读 3902·2021-09-27 13:35
阅读 4280·2021-09-10 11:23
阅读 5463·2021-09-07 10:22
阅读 2983·2021-09-04 16:40
阅读 732·2021-08-03 14:03