java bean 属性验证框架 valid

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

项目介绍

java 开发中,参数校验是非常常见的需求。

但是 hibernate-validator 在使用过程中,依然会存在一些问题。

特性

•支持 fluent-validation

•支持 jsr-303 注解

•支持 i18n

•支持用户自定义策略

•支持用户自定义注解

开源地址

valid

创作目的

hibernate-validator 无法满足的场景

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

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

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

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

其实,在对于多个字段的关联关系处理时,hibernate-validator 就会比较弱。本项目结合原有的优点,进行这一点的功能强化。

validation-api 过于复杂

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

实现起来,特别复杂。

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

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

自定义缺乏灵活性

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

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

过程式编程 vs 注解式编程

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

一个问题是针对属性校验不灵活,有时候针对 bean 的校验,还是要自己写判断。本项目支持 fluent-api 进行过程式编程,同时支持注解式编程。

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

项目模块说明

模块名称说明

valid-api 核心 api 及注解定义

valid-core 针对 valid-api 的核心实现

valid-jsr 针对 JSR-303 标准注解的实现

valid-test 测试代码模块

依赖说明

valid-core 默认引入 valid-api

valid-jsr 默认引入 valid-core

快速开始

准备工作

JDK1.7+

Maven 3.X+

maven 引入

com.github.houbb

valid-jsr

0.1.2

例子

我们直接利用 jsr 内置的约束类:

public void helloValidTest() {

IResult result = ValidBs.on(null, JsrConstraints.notNullConstraint ())

.result()

.print();

Assert.assertFalse(result.pass());

}

对应日志输出为:

DefaultResult{pass=false, notPassList=[DefaultConstraintResult{pass=fal se, message='预期值为 ,实际值为 ', value=null, constrain t='NotNullConstraint', expectValue='not null'}], allList=null}

方法初步说明

ValidBs 用来进行验证的引导类,上述的写法等价于如下:

public void helloValidAllConfigTest() {

IResult result = ValidBs.on(null, JsrConstraints.notNullConstraint ())

.fail(Fails.failFast())

.group()

.valid(DefaultValidator.getInstance())

.result()

.print();

Assert.assertFalse(result.pass());

}

on(Object value, IConstraint… constraints) 指定约束

Object 可以是对象,也可以是普通的值。

constraints 为对应的约束列表,为默认的约束验证提供便利性。

IConstraint 相关创建工具类Constraints、JsrConstraints

fail(IFail fail)

可以指定失败时的处理策略,支持用户自定义失败策略。

实现说明

failOver 失败后继续验证,直到验证完所有属性

failFast 失败后快速返回

group(Class[] classes) 支持分组验证

有时候我们希望,只验证指定某一分组的约束。

可以通过 group() 属性指定,与 IConstraint 中的 group() 属性匹配的约束才会被执行。

valid(IValidator validator) 支持验证策略

默认为 DefaultValidator,为 valid-api 的实现验证。

如果你希望使用 jsr-303 注解,可以使用JsrValidator。

支持自定义验证策略。

result(IResultHandler resultHandler) 验证结果处理

默认为 simple() 的简单结果处理。

可以指定为 detail() 进行详细结果处理查看。

支持用户自定义结果处理策略。

IResult 内置方法

simple()/detail() 处理的结果为 IResult 实现类。

IResult 支持如下方法:

•print()

对结果进行打印,主要便于调试。

•throwEx()

对于参数的校验,一般都是基于异常结合 spring aop来处理的。

throwsEx 会在验证不通过时,抛出 ValidRuntimeException 异常,对应 message 为提示消息。

@Test(expected = ValidRuntimeException.class)

public void resultThrowsExTest() {

ValidBs.on(null, notNullValidatorEntry())

.valid()

.result()

.throwsEx();

}

相关文档
最新文档