返回顶部
首页 > 资讯 > 精选 >hibernate-validator改进校验框架validator v0.4怎么使用
  • 934
分享到

hibernate-validator改进校验框架validator v0.4怎么使用

2023-07-05 14:07:21 934人浏览 薄情痞子
摘要

这篇文章主要讲解了“hibernate-validator改进校验框架validator v0.4怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“hibernate-vali

这篇文章主要讲解了“hibernate-validator改进校验框架validator v0.4怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“hibernate-validator改进校验框架validator v0.4怎么使用”吧!

项目介绍

java 开发中,参数校验是非常常见的需求。但是 hibernate-validator 在使用过程中,依然会存在一些问题。

validator 在 hibernate-validator 等校验工具之上,做了一些改进,使其使用更加便捷优雅,进一步提升工作效率。

变更日志

特性

支持 fluent-validation

支持 jsr-303 注解

支持 i18n

支持用户自定义策略

支持用户自定义注解

支持针对属性的校验

支持过程式编程与注解式编程

支持指定校验生效的条件

创作目的

hibernate-validator 无法满足的场景

如今 java 最流行的 hibernate-validator 框架,但是有些场景是无法满足的。

比如:

  • 验证新密码和确认密码是否相同。(同一对象下的不同属性之间关系)

  • 当一个属性值满足某个条件时,才进行其他值的参数校验。

  • 多个属性值,至少有一个不能为 null

其实,在对于多个字段的关联关系处理时,hibernate-validator 就会比较弱。

本项目结合原有的优点,进行这一点的功能强化。

validation-api 过于复杂

validation-api 提供了丰富的特性定义,也同时带来了一个问题。

实现起来,特别复杂。

然而我们实际使用中,常常不需要这么复杂的实现。

validator-api 提供了一套简化很多的 api,便于用户自行实现。

自定义缺乏灵活性

hibernate-validator 在使用中,自定义约束实现是基于注解的,针对单个属性校验不够灵活。

本项目中,将属性校验约束和注解约束区分开,便于复用和拓展

过程式编程 vs 注解式编程

hibernate-validator 核心支持的是注解式编程,基于 bean 的校验。

一个问题是针对属性校验不灵活,有时候针对 bean 的校验,还是要自己写判断。

本项目支持 fluent-api 进行过程式编程,同时支持注解式编程。

尽可能兼顾灵活性与便利性。

快速开始

准备工作

jdk1.7+

Maven 3.X+

maven 引入

<dependency>    <groupId>com.GitHub.houbb</groupId>    <artifactId>validator-core</artifactId>    <version>0.4.0</version></dependency>

快速入门

定义对象

第一步,我们定义一个常见的 java bean 对象,可以指定内置的注解。

支持 jsr-303 注解和 hibernate-validator 的注解。

public class User {        @HasNotNull({"nickName"})    private String name;        private String nickName;        @AllEquals("passWord2")    private String password;        private String password2;        @Ranges({"boy", "girl"})    private String sex;        @EnumRanges(FailTypeEnum.class)    private String failType;    //getter & setter}
ValidHelper 工具方法

ValidHelper 作为统一封装的工具类,提供了 java bean 校验常见的方法。

方法列表:

序号方法返回值说明
1failOver(Object object)IResult全部验证后返回
2failFast(Object object)IResult快速验证后返回
3failOverThrow(Object object)void全部验证后返回-未通过抛出 ValidRuntimeException 异常
4failFastThrow(Object object)void快速验证后返回-未通过抛出 ValidRuntimeException 异常

使用起来很简单,我们以 failFast 为例:

// 对象定义User user = new User();user.sex("what").password("old").password2("new");// 调用方法IResult result = ValidHelper.failFast(user);

结果:

DefaultResult{pass=false, notPassList=[DefaultConstraintResult{pass=false, message='name: 值 &lt;null&gt; 不是预期值', value=null, constraint='HasNotNullConstraint', expectValue='', fieldName='name'}], allList=null}
  • IResult 方法说明

返回值实现默认为 DefaultResult,接口 IResult 属性如下:

public interface IResult {        boolean pass();        List<IConstraintResult> notPassList();        List<IConstraintResult> allList();        IResult print();        IResult throwsEx();}

注解说明

java bean 的校验,基于注解是比较方便的。和 hibernate-validator 使用类似,这里介绍下常见的注解。

内置约束注解

内置注解如下:

序号注解value()说明
1@AllEqualsString[]当前字段及其指定的字段 全部相等
2@EnumRangesClass<? extends Enum>当前字段必须在枚举值指定的范围内
3@HasNotNullString[]当前字段及其指定的字段 至少有一个不为 null
4@RangesString[]当前字段必须在指定的范围内

JSR-303 + hibernate-validator 约束注解支持

序号注解说明
1@AssertTrue为 true 约束条件
2@AssertFalse为 false 约束条件
3@Null为 null 约束条件
4@NotNull不为 null 约束条件
5@Past是否在当前时间之前约束条件
6@Future是否在当前时间之后约束条件
7@Pattern正则表达式约束条件
8@Size在指定范围内的约束条件
9@Digits数字位数的约束条件
10@DecimalMax最大数字的约束条件
11@DecimalMin最小数字的约束条件
12@Min最小的约束条件
13@Max最大的约束条件
13@NotBlank不能为空格的约束条件
14@NotEmpty不能为空的约束条件
15@Length长度的约束条件
16@CNPJCNPJ 约束条件
17@CPFCPF 约束条件
18@URLURL 约束条件
18@EmailEmail 约束条件
19@UniqueElements元素唯一约束条件
20@Range指定范围元素约束条件

条件注解

说明

有时候我们需要根据不同的参数,进行不同的限制条件。

比如新建时用户 id 不需要传入,但是修改时 id 必填。

如果是传统的 hibernate-validator 处理就会比较麻烦,此处引入条件注解。

内置注解

序号注解说明
1@EqualsCondition等于指定值的条件
2@NotEqualsCondition不等于指定值的条件
3@AlwaysTrueCondition永远生效的条件
4@AlwaysFalseCondition永远不生效的条件

使用

使用起来也不难,下面的效果如下:

  • operType == 'create' 时,name 的校验才会生效。

  • operType != 'create' 时,id 的校验才会生效。

其他使用方式保持不变。

public class ConditionUser {        @Ranges({"create", "edit"})    private String operType;        @EqualsCondition(value = "create", fieldName = "operType")    @Size(min = 3)    @NotNull    private String name;        @NotEqualsCondition(value = "create", fieldName = "operType")    @Size(min = 16)    private String id;    //getter &amp; setter}

过程式接口

说明

日常开发中,我们都很喜欢使用注解对 java bean 进行校验。

但是这回导致我们定义的单个属性校验无法复用。

所以项目中的单个属性校验和注解是一一对应的,为了便于复用。

ValidHelper 方法

ValidHelper 作为统一封装的工具类,提供单个方法校验常见的方法。

和 java bean 类似,方法列表:

序号方法返回值说明
1failOver(Object object, IConstraint constraint)IResult全部验证后返回
2failFast(Object object, IConstraint constraint)IResult快速验证后返回
3failOverThrow(Object object, IConstraint constraint)void全部验证后返回-未通过抛出 ValidRuntimeException 异常
4failFastThrow(Object object, IConstraint constraint)void快速验证后返回-未通过抛出 ValidRuntimeException 异常

使用例子

用法和 bean 的类似,只是入参多了第二个约束条件。

IResult result = ValidHelper.failFast("", Constraints.notEmptyConstraint());

IConstraint 对应关系

注解和常见的接口方法一一对应,所有的约束方法在 Constraints 工具类中。

序号注解说明对应方法
1@AssertTrue为 true 约束条件assertTrueConstraint
2@AssertFalse为 false 约束条件assertFalseConstraint
3@Null为 null 约束条件nullConstraint
4@NotNull不为 null 约束条件notNullConstraint
5@Past是否在当前时间之前约束条件pastConstraint
6@Future是否在当前时间之后约束条件futureConstraint
7@Pattern正则表达式约束条件patternConstraint
8@Size在指定范围内的约束条件sizeConstraint
9@Digits数字位数的约束条件digitsConstraint
10@DecimalMax最大数字的约束条件decimalMaxConstraint
11@DecimalMin最小数字的约束条件decimalMinConstraint
12@Min最小的约束条件minConstraint
13@Max最大的约束条件maxConstraint
13@NotBlank不能为空格的约束条件notBlankConstraint
14@NotEmpty不能为空的约束条件notEmptyConstraint
15@Length长度的约束条件lengthConstraint
16@CNPJCNPJ 约束条件cnpjConstraint
17@CPFCPF 约束条件cpfConstraint
18@URLURL 约束条件urlConstraint
18@EmailEmail 约束条件emailConstraint
19@UniqueElements元素唯一约束条件uniqueElementsConstraint
20@Range指定范围元素约束条件rangeConstraint
21@AllEquals当前字段及其指定的字段 全部相等allEqualsConstraint
22@EnumRanges当前字段必须在枚举值指定的范围内enumRangesConstraint
23@HasNotNull当前字段及其指定的字段 至少有一个不为 nullhasNotNullConstraint
24@Ranges当前字段必须在指定的范围内rangesConstraint
条件注解

注解和常见的接口方法一一对应,所有的约束方法在 Conditions 工具类中。

序号注解说明对应方法
1@EqualsCondition等于指定值的条件equalsCondition
2@NotEqualsCondition不等于指定值的条件notEqualsCondition
3@AlwaysTrueCondition永远生效的条件alwaysTrueCondition
4@AlwaysFalseCondition永远不生效的条件alwaysFalseCondition

注解自定义

说明

内置的注解,自然无法满足所有的场景。

本项目中,约束和条件注解都是支持自定义的。

约束注解 @Constraint

所有系统的内置注解都可以作为学习的例子。

定义注解

以 @AllEquals 为例,核心的部分在 @Constraint(AtAllEqualsConstraint.class)。

我们在 AtAllEqualsConstraint 中实现具体的约束逻辑。

@Target(ElementType.FIELD)@Retention(RetentionPolicy.RUNTIME)@Constraint(AtAllEqualsConstraint.class)public @interface AllEquals {        String[] value();        String message() default "";        Class[] group() default {};}
实现逻辑

推荐直接继承 AbstractAnnotationConstraint<A>,实现对应的逻辑即可。

public class AtAllEqualsConstraint extends AbstractAnnotationConstraint&lt;AllEquals&gt; {    @Override    protected IConstraint buildConstraint(AllEquals annotation) {        return Constraints.allEqualsConstraint(annotation.value());    }}

条件注解 @Condition

所有系统的内置注解都可以作为学习的例子。

定义注解

以 @AlwaysTrueCondition 为例,核心的部分在 @Condition(AtAlwaysTrueCondition.class)。

我们在 AtAlwaysTrueCondition 中实现具体的约束逻辑。

@Target(ElementType.FIELD)@Retention(RetentionPolicy.RUNTIME)@Condition(AtAlwaysTrueCondition.class)public @interface AlwaysTrueCondition {}
实现逻辑

推荐直接继承 AbstractAnnotationCondition<A>,实现对应的逻辑即可。

public class AtAlwaysTrueCondition extends AbstractAnnotationCondition<AlwaysTrueCondition> {    @Override    protected ICondition buildCondition(AlwaysTrueCondition annotation) {        return Conditions.alwaysTrueCondition();    }}

感谢各位的阅读,以上就是“hibernate-validator改进校验框架validator v0.4怎么使用”的内容了,经过本文的学习后,相信大家对hibernate-validator改进校验框架validator v0.4怎么使用这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

--结束END--

本文标题: hibernate-validator改进校验框架validator v0.4怎么使用

本文链接: https://lsjlt.com/news/352279.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • hibernate-validator改进校验框架validator v0.4怎么使用
    这篇文章主要讲解了“hibernate-validator改进校验框架validator v0.4怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“hibernate-vali...
    99+
    2023-07-05
  • hibernate-validator如何使用校验框架
    目录一、前言二、常用注解说明三、定义校验分组四、定义校验Bean五、validator基本使用六、借助BindingResult七、全局拦截校验器八、借助ValidatorUtils...
    99+
    2024-04-02
  • Hibernate-Validator(数据校验框架)
    目录 一、Hibernate-Validator 简介二、项目中为什么要用校验框架三、添加依赖四、看一个入门级案例五、常用注解六、使用groups的校验 一、Hibernate-Validator 简介 hibernate-...
    99+
    2023-08-17
    java hibernate spring
  • SpringBoot参数校验Validator框架怎么使用
    这篇“SpringBoot参数校验Validator框架怎么使用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“SpringB...
    99+
    2023-07-02
  • Spring Boot使用 Hibernate-Validator校验参数时的长度校验
    今天在使用Validator框架数据验证的时候碰到了三个类似的注解,都是用来限制长度,但是用法上有区别: 1,@Size和@Length @Datapublic class LoginVo { @Length(min = 5, ma...
    99+
    2023-09-26
    spring boot hibernate java
  • SpringMVC使用hibernate-validator进行参数校验最佳实践记录
    在我们用Controller接收参数后,往往需要对参数进行校验。如果我们手写校验的话,就会有一堆的判空代码,看起来很不优雅,写起来也费时费力。下面来看下通过hibernate-val...
    99+
    2024-04-02
  • hibernate-validator后端表单数据校验的使用示例详解
    目录hibernate-validator后端表单数据校验的使用1、hibernate-validator介绍2、hibernate-validator常用注解3、 hibernat...
    99+
    2024-04-02
  • Vue Validator表单验证插件怎么使用
    这篇“Vue Validator表单验证插件怎么使用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Vue Validator...
    99+
    2023-07-04
  • Vue中怎么使用Validator表单验证插件
    本文小编为大家详细介绍“Vue中怎么使用Validator表单验证插件”,内容详细,步骤清晰,细节处理妥当,希望这篇“Vue中怎么使用Validator表单验证插件”文章能帮助大家解决疑惑,下面跟着小编的思...
    99+
    2024-04-02
  • hibernate框架怎么搭建和使用
    搭建和使用Hibernate框架可以按照以下步骤进行: 添加Hibernate依赖:在项目的构建文件中(如Maven的pom.x...
    99+
    2023-10-23
    hibernate
  • 怎么使用Nginx和Lua进行JWT校验
    这篇文章将为大家详细讲解有关怎么使用Nginx和Lua进行JWT校验,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Lua脚本这里的secret我遇到了很大的坑。一开始直接从Java后端项目中复制了密钥出来...
    99+
    2023-06-22
  • 使用Spring MVC怎么对参数进行校验
    本篇文章为大家展示了使用Spring MVC怎么对参数进行校验,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。1. 内嵌异常处理如果只是这个controller的异常做单独处理,那么就适合绑定这个co...
    99+
    2023-05-31
    springmvc
  • 使用SpringMVC怎么实现对数据进行校验
    使用SpringMVC怎么实现对数据进行校验?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。一、导入jar包若要实现数据校验功能,需要导入必要的jar包,主要包括以下几个:c...
    99+
    2023-05-31
    springmvc
  • Springboot怎么使用filter对request body参数进行校验
    这篇文章主要为大家展示了“Springboot怎么使用filter对request body参数进行校验”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Springboot怎么使用fil...
    99+
    2023-06-29
  • 怎么使用Three.js框架进行开发
    这篇文章主要介绍了怎么使用Three.js框架进行开发的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇怎么使用Three.js框架进行开发文章都会有所收获,下面我们一起来看看吧。...
    99+
    2024-04-02
  • Vue怎么使用ElementUI对表单元素进行自定义校验
    今天小编给大家分享一下Vue怎么使用ElementUI对表单元素进行自定义校验的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。...
    99+
    2023-07-05
  • Java怎么使用责任链默认优雅地进行参数校验
    本篇内容介绍了“Java怎么使用责任链默认优雅地进行参数校验”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!前言项目中参数校验十分重要,它可以...
    99+
    2023-07-05
  • golang怎么使用Gin框架实现短信验证码功能
    golang怎么使用Gin框架实现短信验证码功能,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。使用json配置文件// 配置文件 "...
    99+
    2023-06-20
  • 怎么使用golang定时任务框架修改数据库
    使用Golang定时任务框架修改数据库,你可以按照以下步骤进行操作:1. 导入所需的包:goimport ("github.com/...
    99+
    2023-10-20
    golang 数据库
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作