hibernatevalidator多个参数联合校验_validator自动化校验

更新时间:2023-05-09 18:10:47 阅读: 评论:0

hibernatevalidator多个参数联合校验_validator⾃动化校验
温馨提⽰
请收藏再看。此⽂篇幅太长,你短时间看不完;此⽂⼲货太多,错过太可惜。
⽰例代码可以私信我获取。
收获
1. 讲解详细:能让你掌握使⽤ hibernate-validator 及类似校验⼯具的各种使⽤姿势
2. 内容全⾯:可以当做知识字典来查询
what
hibernate-validator 是 JSR 380(Bean Validation 2.0)、JSR 303(Bean Validation 1.0)规范的实现。
JSR 380 - Bean Validation 2.0 定义了⼀个实体和⽅法验证的元数据模型和 API。
JavaEE(改名为:Jakarta EE)中制定了 validation 规范,即:javax.validation-api(现为 jakarta.validation-api,jar 包的名字改变,包⾥⾯的包名、类名未变,因此使⽤⽅式不变)包,spring-boot-starter-web、spring-boot-starter-webflux 包都已引⼊此依赖,直接使⽤即可。
有点类似于 slf4j 与 logback(log4j2)的关系,使⽤的时候,代码中使⽤ javax.validate 提供的接⼝规范功能,加载的时候,根据 SPI 规范加载对应的规范实现类。
它和 hibernate 没什么关系,放⼼⼤胆的使⽤吧。
why
hibernate-validator 官⽅有如下说明:
以前的校验如下:
使⽤ hibernate-validator 后,校验逻辑如下:
controller、rvice、dao 层相同的校验逻辑可以使⽤同⼀个数据校验模型。
how
标识注解
@Valid(规范、常⽤)
标记⽤于验证级联的属性、⽅法参数或⽅法返回类型。
在验证属性、⽅法参数或⽅法返回类型时,将验证在对象及其属性上定义的约束。
此⾏为是递归应⽤的。
@Validated(spring)
spring 提供的扩展注解,可以⽅便的⽤于分组校验
22 个约束注解
下⾯除了列出的参数,每个约束都有参数 message,groups 和 payload。这是 Bean Validation 规范的要求。
其中,message 是提⽰消息,groups 可以根据情况来分组。
以下每⼀个注解都可以在相同元素上定义多个。
@AsrtFal
检查元素是否为 fal,⽀持数据类型:boolean、Boolean
@AsrtTrue
检查元素是否为 true,⽀持数据类型:boolean、Boolean
@DecimalMax(value=, inclusive=)
inclusive:boolean,默认 true,表⽰是否包含,是否等于value:当 inclusive=fal 时,检查带注解的值是否⼩于指定的最⼤值。当inclusive=true 检查该值是否⼩于或等于指定的最⼤值。参数值是根据 bigdecimal 字符串表⽰的最⼤值。⽀持数据类型:BigDecimal、BigInteger、CharSequence、(byte、short、int、long 和其封装类)
@DecimalMin(value=, inclusive=)
⽀持数据类型:BigDecimal、BigInteger、CharSequence、(byte、short、int、long 和其封装类)inclusive:boolean,默认 true,表⽰是否包含,是否等于value:当 inclusive=fal 时,检查带注解的值是否⼤于指定的最⼤值。当 inclusive=true 检查该值是否⼤于或等于指定的最⼤值。参数值是根据 bigdecimal 字符串表⽰的最⼩值。
@Digits(integer=, fraction=)
检查值是否为最多包含 integer 位整数和 fraction 位⼩数的数字⽀持的数据类型:BigDecimal, BigInteger, CharSequence, byte, short, int, long 、原⽣类型的封装类、任何 Number ⼦类。
@Email
检查指定的字符序列是否为有效的电⼦邮件地址。可选参数 regexp 和 flags 允许指定电⼦邮件必须匹配的附加正则表达式(包括正则表达式标志)。⽀持的数据类型:CharSequence
@Max(value=)
检查值是否⼩于或等于指定的最⼤值⽀持的数据类型:BigDecimal, BigInteger, byte, short, int, long, 原⽣类型的封装类, CharSequence 的任意⼦类(字符序列表⽰的数字), Number 的任意⼦类, MonetaryAmount 的任意⼦类
@Min(value=)
检查值是否⼤于或等于指定的最⼤值⽀持的数据类型:BigDecimal, BigInteger, byte, short, int, long, 原⽣类型的封装类, CharSequence 的任意⼦类(字符序列表⽰的数字), Number 的任意⼦类, MonetaryAmount 的任意⼦类
@NotBlank
检查字符序列是否为空,以及去空格后的长度是否⼤于 0。与 @NotEmpty 的不同之处在于,此约束只能应⽤于字符序列,并且忽略尾随空格。⽀持数据类型:CharSequence
@NotNull
检查值是否不为 null⽀持数据类型:任何类型
@NotEmpty
检查元素是否为 null 或 空⽀持数据类型:CharSequence, Collection, Map, arrays
@Size(min=, max=)
检查元素个数是否在 min(含)和 max(含)之间⽀持数据类型:CharSequence,Collection,Map, arrays
@Negative
检查元素是否严格为负数。零值被认为⽆效。⽀持数据类型:BigDecimal, BigInteger, byte, short, int, long, 原⽣类型的封装类, CharSequence 的任意⼦类(字符序列表⽰的数字), Number 的任意⼦类, MonetaryAmount 的任意⼦类
@NegativeOrZero
检查元素是否为负或零。⽀持数据类型:BigDecimal, BigInteger, byte, short, int, long, 原⽣类型的封装类, CharSequence 的任意⼦类(字符序列表⽰的数字), Number 的任意⼦类, MonetaryAmount 的任意⼦类
@Positive
检查元素是否严格为正。零值被视为⽆效。⽀持数据类型:BigDecimal, BigInteger, byte, short, int, long, 原⽣类型的封装类, CharSequence 的任意⼦类(字符序列表⽰的数字), Number 的任意⼦类, MonetaryAmount 的任意⼦类
@PositiveOrZero
检查元素是否为正或零。⽀持数据类型:BigDecimal, BigInteger, byte, short, int, long, 原⽣类型的封装类, CharSequence 的任意⼦类(字符序列表⽰的数字), Number 的任意⼦类, MonetaryAmount 的任意⼦类
@Null
检查值是否为 null⽀持数据类型:任何类型
@Future
@FutureOrPrent
检查⽇期是现在或将来⽀持数据类型:同@Future
@Past
检查⽇期是否在过去⽀持数据类型:同@Future
@PastOrPrent
检查⽇期是否在过去或现在⽀持数据类型:同@Future
@Pattern(regex=, flags=)
根据给定的 flag 匹配,检查字符串是否与正则表达式 regex 匹配⽀持数据类型:CharSequence
实现⽰例
@Size
从上⽂可知,规范中,@Size ⽀持的数据类型有:CharSequence,Collection,Map, arrayshibernate-validator 中的实现如下:
针对 CharSequence、Collection、Map 都有⼀个实现,由于 arrays 有多种可能,提供了多个实现。其
中,SizeValidatorForCollection.java 如下:
import java.lang.invoke.MethodHandles;
import java.util.Collection;
import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;
import straints.Size;
@SuppressWarnings("rawtypes")
// as per the JLS, Collection> is a subtype of Collection, so we need to explicitly reference
// Collection here to support having properties defined as Collection (e HV-1551)
public class SizeValidatorForCollection implements ConstraintValidator {
private static final Log LOG = LoggerFactory.make( MethodHandles.lookup() );
private int min;
private int max;
@Override
public void initialize(Size parameters) {
min = parameters.min();
max = parameters.max();
validateParameters();
}
@Override
public boolean isValid(Collection collection, ConstraintValidatorContext constraintValidatorContext) { if ( collection == null ) {
return true;
}
int length = collection.size();
return length >= min && length <= max;
}
private void validateParameters() {
if ( min < 0 ) {
MinCannotBeNegativeException();
}
if ( max < 0 ) {
MaxCannotBeNegativeException();
}
if ( max < min ) {
LengthCannotBeNegativeException();
}

本文发布于:2023-05-09 18:10:47,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/89/875395.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:是否   检查   校验   规范   字符   参数
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图