javavalidate⽅法_【狂⼈⼩⽩】轻量级验证框架Validation.FO
的⼊门与使⽤
Validation.FO 使⽤指南
框架说明这是⼀个验证框架,并且是⼀个 独⽴的验证框架 ,不依赖与其他已有的框架;
可以⾃由的嵌⼊到其他框架,⽐如Spring、Struts等流⾏框架,但实质来说他是独⽴的,所以⽆所谓嵌⼊到哪⾥,如果需要在GUI桌⾯应⽤中,也是完美的;
配置简单,可⾃由扩展验证器,实际只要实现IValidator接⼝,以及在l中添加相关的配置即可;
⽀持Spring接⼝
使⽤过程中,你会感觉好像只⽤了 IValidateService.validate() ⼀个⽅法,这会让⼈感觉良好
优点不与任何对象做绑定,最⼤限度解耦
只要规则配置写的合理,规则可以复⽤到多个对象
扩展验证器很简单
以Map存储验证结果,⾮常简单的导出JSON,只要你愿意
相关⽂档
如何下载Maven依赖 或 直接下载Validation.FO包
cc.fozone.validation
fo-validation
0.9.1.RELEASE
快速开始
使⽤Validation.FO的步骤如下:配置验证规则 l
实例化 IValidateService 对象
调⽤ IValidateService.validate ⽅法
基本的使⽤⽅法
1. 创建POJO对象 User.javapackage validationfo.basic;
import java.sql.Timestamp;
/**
* ⽤户对象
* @author Jimmy Song
*
*/
public class User {
// ⽤户名
private String username;
// 密码
private String password;
// 再次输⼊密码
private String passwordOne;
// 邮箱
private String email;
// 开始与结束时间
private Timestamp starttime;
private Timestamp endtime;
/**
* Setter & Getter
*/
.
..
}
2. 配置验证规则 l
导⼊其他规则⽂件
验证分组,name应该为全局唯⼀的
验证的字段,name是被验证对象的属性字段名
验证规则,name是验证器名称,message是错误后返回的消息
是验证规则时可能需要传⼊的参数,name是参数名,value是参数值<?xml  version="1.0" encoding="UTF-8"?> ...
3. 实例化测试 BasicTest.java
主要步骤:创建配置读取对象IValidateConfig
创建验证服务对象IValidateService
执⾏验证⽅法IValidateService.validate(object, groupId)package validationfo.basic;
...
/**
* 最基本的测试
* @author Jimmy Song
*
*/
public class BasicTest {
public static void main(String[] args) {
/**
* Validation.FO的配置资源
*/
// 验证器配置,系统默认配置
String validatorsXML = "validationfo/basic/l";
// 规则配置
String rulesXML = "validationfo/basic/l";
/**
* 实例化配置对象
*/
IValidateConfig config =new BasicValidateConfig(validatorsXML, rulesXML);
/**
* 实例化验证服务层
*/
IValidateService validateService = new BasicValidateService(config);
// 实例化⽤户
User user = createUser();
/**
* 执⾏验证
*/
Map map = validateService.validate(user, "user.validate");
// 输出结果
if(map == null || map.size() == 0) {
System.out.println("验证成功");
} else {
System.out.println("验证失败,结果如下");
System.out.println(map);
}
}
}
4. 结果输出12:31:41,084  INFO BasicValidateConfig:44 - read validation main file , validationfo/basic/l
验证失败,结果如下
{email=邮件格式不正确, password=两次密码输⼊不正确, starttime=开始时间不能⼤于结束时间, endtime=结束时间不能⼩于开始时间}如何在Spring中使⽤在Spring中需要使⽤ SpringValidateConfg 配置对象
需要额外配置 SpringValidator Bean对象
1. 配置Spring配置 l<?xml  version="1.0" encoding="UTF-8"?>
xmlns:xsi="/2001/XMLSchema-instance">
validationfo/spring/l
validationfo/spring/l
2. 如何通过Spring进⾏验证,SpringTest.javapublic class SpringTest {
public static void main(String[] args) {
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(
"validationfo/l");
// 获取验证服务
IValidateService service = Bean(IValidateService.class);
/
/ 创建⽤户对象
User user = createUser();
// 执⾏验证
Map map = service.validate(user, "user.validate");
// 输出结果
if (map == null || map.size() == 0) {
System.out.println("验证成功");
} else {
System.out.println("验证失败,结果如下");
System.out.println(map);
}
}
}
3. 执⾏结果
13:26:00,150  INFO ClassPathXmlApplicationContext:510 - Refreshing t.support.ClassPathXmlApplica
13:26:00,194  INFO XmlBeanDefinitionReader:315 - Loading XML bean definitions from class path resource [validationfo/spr
13:26:00,373  INFO DefaultListableBeanFactory:598 - Pre-
instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@212b0f8a: defining beans [spri
13:26:00,442  INFO BasicValidateConfig:44 - read validation main file , validationfo/spring/l
验证失败,结果如下
{email=邮件格式不正确, password=两次密码输⼊不正确, starttime=开始时间不能⼤于结束时间, endtime=结束时间不能⼩于开始时间} Validator验证器与规则
系统默认的验证器⽂件 l<?xml  version="1.0" encoding="UTF-8"?>
默认验证规则
required - 必填字段
消息message: 必填
参数param: ⽆
案例:
match - 正则匹配
消息message: 必填
参数param: 有NameMustDescriptionregexYes正则表达式,如果为空,验证直接返回true 案例:
between - 判断字符串或数组⾮空长度是否介于两者之间,min <= length <= max
小白学java有前途吗消息message: 必填
参数param: 有NameMustDescriptionminYes最⼩长度(包含)
maxYes最⼤长度(包含)
案例:
min - 判断字符串或数组⾮空长度是否⼤于等于最⼩长度,length >= min
消息message: 必填
参数param: 有NameMustDescriptionvalueYes最⼩长度(包含)
案例:
max - 判断字符串或数组⾮空长度是否⼩于等于最⼤长度,length <= max
消息message: 必填
参数param: 有NameMustDescriptionvalueYes最⼤长度(包含)
案例:
equals - 判断字段是否与指定的字段值是否相同
消息message: 必填
参数param: 有NameMustDescriptiontargetYes指定的字段名称,并⾮确定的值
案例:
POJO对象部分字段public class User {
private String password;
private String passwordOne;
}
注:这⾥会将password与⽬标passwordOne字段的值进⾏equals⽐较
有些时候你可能需要重写equals⽅法
timestampLessEqual - 时间戳是否⼩于等于指定的⽬标时间字段
消息message: 必填
参数param: 有NameMustDescriptiontargetYes指定的时间字段名称,并⾮确定的值
案例: