第九章 校验框架
- 格式:ppt
- 大小:1.35 MB
- 文档页数:34
Validator验证框架一、使用Validator验证框架的必要性Struts框架能够在ActionForm的validate()方法中对用户输入的表单数据进行验证。
这种验证方式有两个局限:●必须通过程序代码来实现验证逻辑,如果验证逻辑发生变化,必须重新编写和编译程序代码。
●当系统中有多个ActionForm,并且他们包括一些相同的验证逻辑时,开发人员必须对每个ActionForm进行反复编程,完成相同的验证逻辑,这会降低代码的可重用性。
由于validate()方法含有这样的局限性,所以我们今天来学习Validator框架,它能够克服以上在ActionForm中以编程方式进行数据验证的局限,它允许为Struts应用灵活的配置验证规则,无须编程。
他所写的是规则,而不是我们编写程序代码。
二、安装并配置validator框架现在,Validator框架如今成为Jakarta的公共项目的一部分,可以从/commons/下载单独的Validator的框架软件。
此外,在Struts 框架中也携带了Validator框架。
Validator框架主要依赖于两个JAR文件:●jakarta-oro.jar:提供了一组处理文本的类,具有文本替换、过滤和分割等功能。
●commons-validator.jar:提供了一个简单、可扩展的验证框架,包括了通用的验证方法和验证规则。
在Struts软件中携带了两个JAR文件。
如果在Struts应用中使用了Validator 框架,那么把这两个JAR文件添加到应用的WEB-INF/lib目录下。
Validator框架采用两个基于XML的配置文件来配置验证规则。
这两个文件为validator-rules.xml和validator.xml。
在Struts应用中,他们均存放在WEB-INF 目录下。
三、validaotr-rules.xml文件validator-rules.xml文件包含了一组通用的验证规则,对所有的Struts应用都适用。
validation框架用法Validation框架是一种用于验证用户输入数据的工具。
它可以帮助开发者确保输入数据的合法性,并提供错误信息提示。
以下是Validation框架的用法:1. 导入Validation框架的库文件。
大多数编程语言都有自己的Validation框架,如Java中的Hibernate Validator、JavaScript中的Joi等。
2. 创建验证规则。
验证规则定义了输入数据的约束条件,如必填字段、最大长度、合法格式等。
通过使用规则构建器或注解等方式,开发者可以定义一组验证规则。
3. 应用验证规则。
使用Validation框架提供的API,将验证规则应用到需要验证的数据上。
这可以通过调用验证方法或使用注解等方式完成。
4. 处理验证结果。
Validation框架会返回验证结果,开发者可以根据结果判断输入数据是否合法,并根据需要进行处理。
通常,验证结果包含了验证状态、错误信息和错误字段等信息。
5. 提供错误信息。
如果验证失败,开发者可以使用Validation框架提供的错误信息和错误字段,向用户展示相应的错误提示。
这可以帮助用户了解输入数据的问题,以便进行修正。
6. 可选步骤:定制验证规则。
有些Validation框架允许开发者根据自身需求定制验证规则。
这可以通过创建自定义验证规则、使用正则表达式等方式实现。
总结来说,Validation框架的使用一般包括创建验证规则、应用验证规则、处理验证结果和提供错误信息等步骤。
通过使用Validation框架,开发者可以提高用户输入数据的合法性和安全性。
Spring框架中的数据校验在软件开发的过程中,数据校验是一个非常重要的环节。
合理的数据校验可以有效地保障数据的完整性,减少错误和异常的发生,提高系统的稳定性和安全性。
Spring框架为我们提供了强大灵活的数据校验功能,通过使用Spring的数据校验机制,我们可以方便地对各种数据进行校验,确保数据的合法性。
1. 数据校验的重要性数据校验在软件开发中扮演着非常重要的角色。
在用户输入数据的时候,往往会存在各种各样的错误情况,例如无效数据、越界数据、非法字符等等,这些错误的数据如果不经过校验直接进入系统,就有可能导致系统运行出现异常甚至崩溃。
因此,数据校验作为数据有效性的最后一关,必须非常严密和完善。
2. Spring框架中的数据校验功能Spring框架提供了一系列的数据校验工具和接口,使得数据校验变得非常简单和灵活。
其中最核心的接口是`Validator`,我们可以通过实现该接口来定义自己的数据校验规则。
此外,Spring还提供了`BindingResult`接口来封装校验结果,方便我们处理校验错误。
3. 数据校验的常见应用场景数据校验在实际开发中有着广泛的应用场景。
以下是一些常见的数据校验场景:3.1 表单验证在Web开发中,表单输入是用户和系统之间的重要交互方式。
为了确保用户输入的数据符合要求,我们需要对表单数据进行校验。
Spring框架提供了`@Valid`注解、`@ModelAttribute`注解和`BindingResult`接口来支持表单验证,我们可以通过编写校验规则来验证表单输入数据的合法性。
3.2 参数校验在Web开发中,前端参数传递给后端接口时,需要对参数进行校验,以确保参数的合法性和安全性。
Spring框架提供了`@RequestParam`、`@PathVariable`等注解和`BindingResult`接口来对参数进行校验,从而提供更加安全可靠的接口。
3.3 实体类验证在业务逻辑中,我们经常需要对实体类的属性进行校验,以保证业务逻辑的正确性。
一、Validator框架的优势Validator框架是一个Struts插件,最初由David Winterfeldt设计并实现。
Validator框架从Struts 0.5时代就可以使用,但那时Validator框架只是被捐助的一个jar包。
Apache组织为了使开发人员更方便地使用Validator 框架,决定从Struts1.1开始,将Validator框架作为Struts的一部分同Struts 一起发布。
Validator框架可以在XML文件中配置验证规则和验证对象。
因此,使用Validator框架可以无需在ActionForm的子类中覆盖validate方法就可以很方便地验证客户端的提交数据。
由于Validator框架内置了很多预定义的验证机制,如验证某个属性是否存在,验证EMail是否合法等。
所以在一般情况下,只需要配置XML文件就可以满足我们的验证需求。
在使用Validator框架时,就会发现这种方式要比直接使用validate方法进行验证会给我们带来如下的好处:1. 更容易维护。
由于验证信息可以被放置在同一个配置文件中,因此,我们可以更容易地来维护这些验证信息。
2. 标准化。
由于很多简单的验证都是相同的。
如用户名和密码都要求由字母、数字以及下划下组成。
如果将这些验证都写在validate方法中,对这些验证进行标准化非常困难。
而在Validator框架中的这些验证机制都是预先定义的,因此,标准化相同的验证对于Validator框架来说将是一件非常轻松的事。
3. 避免重造轮子。
虽然一些验证很简单,但如果想正确实现它们也是非常困难的。
一个典型的例子是验证EMail地址的格式。
如果这个验证要想完美无缺,就必须按着RFC-2822规范的要求来验证EMail地址。
而如果我们使用Validator 框架,就无需再重造轮子来验证EMail地址了。
4. 减少重复代码的数量。
由于Validator框架提供了很多预定义的验证,因此,我们可以避免自己写很多重复的代码进行验证。
Struts2验证框架的基本用法防止不正确或不符合业务需求的数据进入应用程序是必不可少的,服务器端的验证是防止不正确的数据进入应用程序之前的最后一道屏障。
在真实的业务逻辑被调用之前,应验证用户提交的数据是否满足需求,若数据不符合需求,应告知用户发生了什么错误及如何修正输入。
示例:validator,利用Struts2的验证框架在服务器端验证用户的输入。
●效果:●实现步骤(1)完成index.jsp → register →show.jsp(2)为register添加验证规则,在StudentAction同包下创建名为:StudentAction-register-validation.xml的配置文件,struts2的验证框架会自动读取该文件中定义的验证规则进行校验工作。
其中register是action的名称,若Action类中仅有名为execute的默认执行方法,则该文件命名模式为:Action类名-validation.xml。
其中,DOCTYPE的定义代码可到xwork-core-x.x.x.jar包中的xwork-validator-x.x.x.dtd 文档中去复制。
requiredstring :必填字符串>0stringlength :检查字符串长度是否在指定的范围内,其范围使用<param>来指定maxLength和minLength。
int :检查整数是否在指定的范围内,其范围使用<param>来指定min和max值。
date :检查日期是否在指定的范围内,其范围使用<param>来指定min和max值。
【注】类型转换在验证框架之前进行!(3)为register增加一个名为input的result定义,该result代表了验证框架验证失败后的转向页面,一般是返回至之前的表单页。
课堂练习:自己动手实现validator示例,体会struts2验证框架的一般用法。
jQuery validation验证框架jQuery验证框架(一)可选项(jQuery validation)15人收藏此文章,收藏此文章发表于8个月前, 已有3152次阅读共0个评论15人收藏此文章jQuery验证框架Html代码1.<script type="text/javascript" src=js/jquery-1.3.2.min.js></script>2.<script type="text/javascript" src=js/jquery.validate.pack.js></script>3.<script type="text/javascript">4. $(document).ready(function(){5. $("#textForm").validate();6. });7.</script>8.<form class="cmxform" id="commentForm" method="get" action="">9. Name<input id="cname" name="name" size="25" class="required" minlength="2" />10. <input class="submit" type="submit" value="Submit"/>11.</form>此文谨以以上js片段开始介绍jQuery Validation。
华为wsf参数校验框架华为wsf参数校验框架是华为公司开发的一款用于参数校验的工具,它能够有效地提高开发者的开发效率和代码的稳定性。
本文将介绍华为wsf参数校验框架的特点和使用方法。
华为wsf参数校验框架具有以下几个特点:1. 简单易用:华为wsf参数校验框架采用注解方式进行参数校验,开发者只需要在参数上添加相应的注解,就能够对参数进行校验。
这种方式简单明了,易于上手。
2. 支持多种校验规则:华为wsf参数校验框架支持多种校验规则,如必填、长度限制、范围限制等。
开发者可以根据实际需求选择相应的校验规则进行参数校验。
3. 支持自定义校验规则:除了内置的校验规则外,华为wsf参数校验框架还支持开发者自定义校验规则。
开发者可以根据业务需求,自定义一些特殊的校验规则,从而满足更加复杂的参数校验需求。
4. 支持多种数据类型:华为wsf参数校验框架支持多种数据类型的参数校验,包括基本数据类型、字符串、集合等。
无论是简单的参数校验还是复杂的数据结构校验,都能够得到良好的支持。
使用华为wsf参数校验框架的方法如下:1. 引入依赖:首先,需要在项目的pom.xml文件中添加华为wsf 参数校验框架的依赖。
可以通过Maven或者手动添加jar包的方式引入。
2. 添加注解:在需要校验的参数上添加相应的注解。
例如,如果需要对一个字符串参数进行非空校验,可以在参数上添加@NotNull 注解。
3. 执行校验:在方法中调用参数校验的方法,对参数进行校验。
校验结果可以通过返回值或者异常的方式进行处理。
下面是一个简单的示例代码:```javapublic class UserService {public void createUser(@NotNull String username, @Size(min = 6, max = 20) String password) {// do something}}```在上面的代码中,createUser方法有两个参数,其中username参数使用了@NotNull注解进行非空校验,password参数使用了@Size注解进行长度限制校验。
Spring校验框架
Spring拥有自己的校验框架,使用起来非常的简便。
本次主要使用的是继续Validator接口来实现的数据校验。
最终配合i18n来实现不同语言版本的校验信息的显示。
环境说明,sts3.8.2+maven3.3.9+tomcat8.5
实现步骤:
1. 新增maven web项目,在pom中添加依赖
2. 在web.xml中配置Spring MVC的配置文件
3. 在Spring MVC配置文件WEB-INF/springDispatcherServlet-servlet.xml 中设置
4. 新增pojo类Student
5. 新增校验类StudentValidater实现Spring的Validate接口5
6. 新增控制器类StudentController
6. WEB-INF下新增两个msg文件以支持中文(msg_zh_CN.properties)和英文(msg_en_US.properties)的校验,如果有需要还是自行按照规则添加该文件
7. 在webapp下新增saveStudent.jsp页面
8. 在webapp下新增success.jsp
9. 整体项目的结构图片
10. 整体项目的运行结果
a. 英文不合法校验
b. 中文不合法校验
c. 校验成功页面。
jQueryValidate验证框架详解(推荐)jQuery Validate 插件为表单提供了强⼤的验证功能,让客户端表单验证变得更简单,同时提供了⼤量的定制选项,满⾜应⽤程序各种需求。
⼀、导⼊js库<script type="text/javascript" src="<%=path %>/validate/jquery-1.6.2.min.js"></script><script type="text/javascript" src="<%=path %>/validate/jquery.validate.min.js"></script>注:<%=request.getContextPath() %>返回web项⽬的根路径。
⼆、默认校验规则(1)、required:true 必输字段(2)、remote:"remote-valid.jsp" 使⽤ajax⽅法调⽤remote-valid.jsp验证输⼊值(3)、email:true 必须输⼊正确格式的电⼦邮件(4)、url:true 必须输⼊正确格式的⽹址(5)、date:true 必须输⼊正确格式的⽇期,⽇期校验ie6出错,慎⽤(6)、dateISO:true 必须输⼊正确格式的⽇期(ISO),例如:2009-06-23,1998/01/22 只验证格式,不验证有效性(7)、number:true 必须输⼊合法的数字(负数,⼩数)(8)、digits:true 必须输⼊整数(9)、creditcard:true 必须输⼊合法的信⽤卡号(10)、equalTo:"#password" 输⼊值必须和#password相同(11)、accept: 输⼊拥有合法后缀名的字符串(上传⽂件的后缀)(12)、maxlength:5 输⼊长度最多是5的字符串(汉字算⼀个字符)(13)、minlength:10 输⼊长度最⼩是10的字符串(汉字算⼀个字符)(14)、rangelength:[5,10] 输⼊长度必须介于 5 和 10 之间的字符串")(汉字算⼀个字符)(15)、range:[5,10] 输⼊值必须介于 5 和 10 之间(16)、max:5 输⼊值不能⼤于5(17)、min:10 输⼊值不能⼩于10三、默认的提⽰messages: {required: "This field is required.",remote: "Please fix this field.",email: "Please enter a valid email address.",url: "Please enter a valid URL.",date: "Please enter a valid date.",dateISO: "Please enter a valid date (ISO).",dateDE: "Bitte geben Sie ein g眉ltiges Datum ein.",number: "Please enter a valid number.",numberDE: "Bitte geben Sie eine Nummer ein.",digits: "Please enter only digits",creditcard: "Please enter a valid credit card number.",equalTo: "Please enter the same value again.",accept: "Please enter a value with a valid extension.",maxlength: $.validator.format("Please enter no more than {0} characters."),minlength: $.validator.format("Please enter at least {0} characters."),rangelength: $.validator.format("Please enter a value between {0} and {1} characters long."),range: $.validator.format("Please enter a value between {0} and {1}."),max: $.validator.format("Please enter a value less than or equal to {0}."),如需要修改,可在js代码中加⼊:$.extend($.validator.messages, {required: "必选字段",remote: "请修正该字段",email: "请输⼊正确格式的电⼦邮件",url: "请输⼊合法的⽹址",date: "请输⼊合法的⽇期",dateISO: "请输⼊合法的⽇期 (ISO).",number: "请输⼊合法的数字",digits: "只能输⼊整数",creditcard: "请输⼊合法的信⽤卡号",equalTo: "请再次输⼊相同的值",accept: "请输⼊拥有合法后缀名的字符串",maxlength: $.validator.format("请输⼊⼀个长度最多是 {0} 的字符串"),minlength: $.validator.format("请输⼊⼀个长度最少是 {0} 的字符串"),rangelength: $.validator.format("请输⼊⼀个长度介于 {0} 和 {1} 之间的字符串"),range: $.validator.format("请输⼊⼀个介于 {0} 和 {1} 之间的值"),max: $.validator.format("请输⼊⼀个最⼤为 {0} 的值"),min: $.validator.format("请输⼊⼀个最⼩为 {0} 的值")});推荐做法,将此⽂件放⼊messages_cn.js中,在页⾯中引⼊<script type="text/javascript" src="<%=path %>/validate/messages_cn.js"></script>四、使⽤⽅式1、metadata⽤法,将校验规则写到控件中<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><%String path = request.getContextPath();String basePath = request.getScheme() + "://" + request.getServerName() + ":"+ request.getServerPort() + path + "/";%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><base href="<%=basePath%>"><title>jQuery Validate验证框架详解-metadata⽤法</title><meta http-equiv="pragma" content="no-cache"><meta http-equiv="cache-control" content="no-cache"><meta http-equiv="expires" content="0"><meta http-equiv="keywords" content="keyword1,keyword2,keyword3"><meta http-equiv="description" content="This is my page"><script type="text/javascript" src="<%=request.getContextPath()%>/validate/jquery-1.6.2.min.js"></script><script type="text/javascript" src="<%=request.getContextPath()%>/validate/jquery.validate.min.js"></script> <script type="text/javascript" src="<%=request.getContextPath()%>/validate/jquery.metadata.min.js"></script> <script type="text/javascript" src="<%=request.getContextPath()%>/validate/messages_zh.js"></script><script type="text/javascript">$(function(){$("#myform").validate();});</script></head><body><form id="myform" method="post" action=""><p><label for="myname">⽤户名:</label><!-- id和name最好同时写上 --><input id="myname" name="myname" class="required" /></p><p><label for="email">E-Mail:</label><input id="email" name="email" class="required email" /></p><p><label for="password">登陆密码:</label><input id="password" name="password" type="password"class="{required:true,minlength:5}" /><label for="confirm_password">确认密码:</label><input id="confirm_password" name="confirm_password" type="password"class="{required:true,minlength:5,equalTo:'#password'}" /></p><p><label for="confirm_password">性别:</label><!-- 表⽰必须选中⼀个 --><input type="radio" id="gender_male" value="m" name="gender" class="{required:true}" /><input type="radio" id="gender_female" value="f" name="gender"/></p><p><label for="confirm_password">爱好:</label><!-- checkbox的minlength表⽰必须选中的最⼩个数,maxlength表⽰最⼤的选中个数,rangelength:[2,3]表⽰选中个数区间 --> <input type="checkbox" id="spam_email" value="email" name="spam[]" class="{required:true, minlength:2}" /><input type="checkbox" id="spam_phone" value="phone" name="spam[]" /><input type="checkbox" id="spam_mail" value="mail" name="spam[]" /></p><p><label for="confirm_password">城市:</label><select id="jungle" name="jungle" title="Please select something!" class="{required:true}"><option value=""></option><option value="1">厦门</option><option value="2">泉州</option><option value="3">Oi</option></select></p><p><input class="submit" type="submit" value="⽴即注册" /></p></form></body></html>使⽤class="{}"的⽅式,必须引⼊包:jquery.metadata.js;可以使⽤如下的⽅法,修改提⽰内容:class="{required:true,minlength:5,messages:{required:'请输⼊内容'}}";在使⽤equalTo关键字时,后⾯的内容必须加上引号,如下代码:class="{required:true,minlength:5,equalTo:'#password'}"2、将校验规则写到js代码中<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><%String path = request.getContextPath();String basePath = request.getScheme() + "://" + request.getServerName() + ":"+ request.getServerPort() + path + "/";%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><base href="<%=basePath%>"><title>jQuery Validate验证框架详解</title><meta http-equiv="pragma" content="no-cache"><meta http-equiv="cache-control" content="no-cache"><meta http-equiv="expires" content="0"><meta http-equiv="keywords" content="keyword1,keyword2,keyword3"><meta http-equiv="description" content="This is my page"><script type="text/javascript" src="<%=request.getContextPath()%>/validate/jquery-1.6.2.min.js"></script> <script type="text/javascript" src="<%=request.getContextPath()%>/validate/jquery.validate.min.js"></script> <script type="text/javascript">$(function(){var validate = $("#myform").validate({debug: true, //调试模式取消submit的默认提交功能//errorClass: "label.error", //默认为错误的样式类为:errorfocusInvalid: false, //当为false时,验证⽆效时,没有焦点响应onkeyup: false,submitHandler: function(form){ //表单提交句柄,为⼀回调函数,带⼀个参数:formalert("提交表单");form.submit(); //提交表单},rules:{myname:{required:true},email:{required:true,email:true},password:{required:true,rangelength:[3,10]},confirm_password:{equalTo:"#password"}},messages:{myname:{required:"必填"},email:{required:"必填",email:"E-Mail格式不正确"},password:{required: "不能为空",rangelength: $.format("密码最⼩长度:{0}, 最⼤长度:{1}。
Django框架开发中的数据校验与验证Django是一种高效的Python网络开发框架,它提供了许多功能和组件,方便开发人员快速构建网站和应用程序。
在使用Django进行开发时,数据校验与验证是一个非常重要的环节,确保用户输入的数据符合预期的格式和规范,从而增加系统的安全性和可靠性。
本文将重点讨论Django框架开发中的数据校验与验证。
1. 数据校验的重要性数据校验是Web应用程序的关键组成部分之一。
通过对用户输入的数据进行校验,可以有效防止一些常见的安全漏洞,如跨站脚本攻击(XSS)和SQL注入攻击。
同时,数据校验也有助于提高系统的可靠性和稳定性,避免一些潜在的错误和异常情况的出现。
因此,合理利用Django框架提供的数据校验与验证机制,对于开发人员来说至关重要。
2. 数据校验与验证的方法在Django框架中,有多种方法可以进行数据校验与验证。
下面将介绍其中几种常见的方法。
2.1 表单验证Django框架提供了强大的表单验证机制,开发者可以通过定义表单类并利用内置的验证器来对用户输入的数据进行验证。
表单验证可以在模板中直接渲染,并展示给用户错误信息。
开发者可以根据具体需求,自定义验证器或使用内置的验证器来满足不同的数据校验要求。
例如,以下是一个简单的表单验证示例:```pythonfrom django import formsclass LoginForm(forms.Form):username = forms.CharField(label='用户名', max_length=100)password = forms.CharField(label='密码',widget=forms.PasswordInput)def clean_username(self):username = self.cleaned_data.get('username')# 自定义验证规则if username == 'admin':raise forms.ValidationError("用户名不能为admin")return username```在这个示例中,通过定义LoginForm表单类,并利用CharField和PasswordInput等字段对用户名和密码进行校验。
Java简单校验框架数据校验框架现状在我们的⽅法⼊⼝后⾯,难免会有如下样⼦的代码:result.setSuccess(false);if (StringUtils.isBlank(bizOrder.getThirdOrder())) {result.setResultMessage("thirdOrder不能为空");return result;}if(bizOrder.getThirdOrder().length() > 100){result.setResultMessage("thirdOrder长多过长,必须在100以内");return result;}if (StringUtils.isBlank(bizOrder.getSku())) {result.setResultMessage("sku不能为空");return result;}if (StringUtils.isBlank(bizOrder.getName())) {result.setResultMessage("name不能为空");return result;}if(bizOrder.getName().length() > 20){result.setResultMessage("name字数过长");return result;}if (bizOrder.getProvince() == 0 || bizOrder.getCity() == 0|| bizOrder.getCounty() == 0) {result.setResultMessage("地址信息不正确");return result;}if (StringUtils.isBlank(bizOrder.getAddress())) {result.setResultMessage("address不能为空");return result;}对于⼀名有洁癖的程序员,这显然是不⾏的,我们要更加的优雅。
springboot使⽤校验框架validation校验b/s系统中对http请求数据的校验多数在客户端进⾏,这也是出于简单及⽤户体验性上考虑,但是在⼀些安全性要求⾼的系统中服务端校验是不可缺少的。
Spring3⽀持JSR-303验证框架,JSR-303 是Java EE 6 中的⼀项⼦规范,叫做BeanValidation,官⽅参考实现是hibernate Validator(与Hibernate ORM 没有关系),JSR 303⽤于对Java Bean 中的字段的值进⾏验证。
validation与 springboot 结合1. bean 中添加标签部分代码:标签需要加在属性上,@NotBlank 标签含义⽂章末尾有解释public class User {private Integer id;@NotBlank(message = "{.notBlank}")private String name;private String username;2. Controller中开启验证在Controller 中请求参数上添加@Validated 标签开启验证@RequestMapping(method = RequestMethod.POST)public User create(@RequestBody @Validated User user) {return userService.create(user);}3. resource 下新建错误信息配置⽂件在resource ⽬录下新建提⽰信息配置⽂件“ValidationMessages.properties“注意:名字必须为“ValidationMessages.properties“ 因为SpringBoot⾃动读取classpath中的ValidationMessages.properties⾥的错误信息ValidationMessages.properties ⽂件的编码为ASCII。
项目介绍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-apivalid-jsr 默认引入 valid-core快速开始准备工作JDK1.7+Maven 3.X+maven 引入<dependency><groupId>com.github.houbb</groupId><artifactId>valid-jsr</artifactId><version>0.1.2</version></dependency>例子我们直接利用 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='预期值为 <not null>,实际值为 <null>', 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 可以是对象,也可以是普通的值。