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

网友投稿 630 2023-01-07


Hibernate Validator实现更简洁的参数校验及一个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上加上以下注解即可

HJnsIucAt 注解

用途

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=)

被注释的元素必须在合适的范围内

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;

@HJnsIucAtMax(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

性能测试

结果如图:


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:微服务网关怎么调研(阿里微服务网关)
下一篇:接口自动化框架发送邮件(接口自动化框架发送邮件失败)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~