博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
数据校验框架
阅读量:4102 次
发布时间:2019-05-25

本文共 9322 字,大约阅读时间需要 31 分钟。

(参考:http://blog.csdn.net/sinat_39955521/article/details/78922814

http://blog.csdn.net/sinat_39955521/article/details/78922427)

数据校验框架

Spring 3.0拥有直接独立的数据校验框架,同时支持JSR 303标准的校验框架,spring的DataBinder在进行数据绑定时,可以同时调用校验框架完成数据校验工作。在Spring MVC中,则可以直接通过注解驱动的方式进行数据校验。

Spring的org.springframework.validation是校验框架所在的包。

JSR 303

JSP 303是java为Bean数据合法性校验所提供的标准框架,它已经包含在java EE 6.0。JSR 303通过Bean属性上标注类似于@NotNull、@Max等标准的注解指定校验规则,并通过标准的验证接口对Bean进行验证。

你可以通过http://jcp.org/en/jsr/detail?id=3030了解JSP 303 的详细内容。

数据校验框架

<mvc:annotation-driven/>会默认装配好一个LocalValidatorFactoryBean,通过在处理方法的入参上标注@Valid注解既可让Spring MVC在完成数据绑定后执行数据校验的工作

public class User {         @Pattern(regexp="w{4,30}")      private String userName;	      @Length(min=2,max=100)      private String realName;	     @Past      @DateTimeFormat(pattern="yyyy-MM-dd")     private Date birthday;	    @DecimalMin(value="1000.00")    @DecimalMax(value="100000.00")     @NumberFormat(pattern="#,###.##")    private long salary;}
注意:Spring本身没有提供JSR 303的实现,所以必须将JSR 303的实现者(如Hibernate Validator)的jar文件放到类路径下,Spring将自动加载并装配好JSR 303的实现者。
如何使用注解驱动的校验

@Controllerpublic class UserController {     @RequestMapping(value = "/handle91")     public String handle91(@Valid  User user,BindingResult bindingResult){		          if(bindingResult.hasErrors()){               return "/user/register3";          }else{               return "/user/showUser";          }    }
在已经标注了JSR 303注解的表单/命令对象前标注一个@Valid,Spring MVC框架在将请求数据绑定到该入参对象后,就会调用校验框架根据注解声明的校验规则实施校验。
使用校验功能时,处理方法要如何签名?

       Spring MVC是通过对处理方法签名的规约来保存校验结果的:前一个表单/命令对象的校验结果保存在其后的入参中,这个保存校验结果的入参必须是BindingResult或Errors类型,这两个类都位于org.springframework.validation包中。

校验错误消息存放位置

4.Spring将HttpServletRequest对象数据绑定到处理方法的入参对象中(表单/命令对象);

5.将绑定错误消息、检验错误消息都保存到隐含模型中;

6.本次请求的对应隐含模型数据存放到HttpServletRequest的属性列表中,暴露给视图对象。

页面如何显示错误消息

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><%@ taglib prefix="c"      uri="http://java.sun.com/jsp/jstl/core" %>   <%@ taglib prefix="form"   uri="http://www.springframework.org/tags/form" %>注册用户     
用户名:
示例:

所需jar包

4.0.0
cn.et
SpringMvc_Verify
0.0.1-SNAPSHOT
war
org.springframework
spring-webmvc
4.2.0.RELEASE
org.hibernate
hibernate-validator
4.3.2.Final
net.sf.json-lib
json-lib
2.4
jdk15
com.fasterxml.jackson.core
jackson-databind
2.8.9
org.codehaus.jackson
jackson-mapper-asl
1.9.13
org.apache.openejb
javaee-api
5.0-1
provided
javax.faces
jsf-api
1.2_04
provided
javax.servlet
jstl
1.2
provided
javax.servlet.jsp
jsp-api
2.1
provided
javax.faces
jsf-impl
1.2_04
provided
${basedir}/src
${basedir}/WebRoot/WEB-INF/classes
${basedir}/src
**/*.java
maven-war-plugin
${basedir}/WebRoot
${basedir}/WebRoot
maven-compiler-plugin
1.5
1.5
web.xml配置

contextConfigLocation
classpath:/spring.xml
org.springframework.web.context.ContextLoaderListener
myFile
org.springframework.web.filter.HiddenHttpMethodFilter
myFile
/*
index.jsp
encodingFilter
org.springframework.web.filter.CharacterEncodingFilter
encoding
UTF-8
forceEncoding
true
encodingFilter
/*
mvc
org.springframework.web.servlet.DispatcherServlet
1
mvc
/
index.jsp
springmvc.xml配置

spring,xml

校验类

package cn.et;import javax.validation.constraints.Max;import javax.validation.constraints.Min;import javax.validation.constraints.Pattern;import javax.validation.constraints.Size;import org.hibernate.validator.constraints.NotEmpty;public class UserInfo {	/**	 * NotNull 属性名 !=null	 * NotEmpty 属性名!=null &&  !属性名.equals("")	 */	@NotEmpty(message="用户名不能为空")	private String userName;		@NotEmpty(message="密码不能为空")	private String password;		@NotEmpty(message="再次输入不能为空")	private String repassword;		// lixin@126.com  	@Pattern(message="邮箱格式错误",regexp=".+@.+\\..+")	private String email;		@NotEmpty(message="年龄不能为空")	@Min(value=1,message="年龄必须大于1")	@Max(value=100,message="年龄必须小于100")	private String age;		@Size(min=11, max=11,message="手机号码必须是11位")	private String phone;		@Pattern(message="时间格式错误",regexp="(([0-9]{3}[1-9]|[0-9]{2}[1-9][0-9]{1}|[0-9]{1}[1-9][0-9]{2}|[1-9][0-9]{3})-(((0[13578]|1[02])-(0[1-9]|[12][0-9]|3[01]))|((0[469]|11)-(0[1-9]|[12][0-9]|30))|(02-(0[1-9]|[1][0-9]|2[0-8]))))|((([0-9]{2})(0[48]|[2468][048]|[13579][26])|((0[48]|[2468][048]|[3579][26])00))-02-29)")	private String time;		@Pattern(message="网址格式错误",regexp="^([hH][tT]{2}[pP]:/*|[hH][tT]{2}[pP][sS]:/*|[fF][tT][pP]:/*)(([A-Za-z0-9-~]+).)+([A-Za-z0-9-~\\/])+(\\?{0,1}(([A-Za-z0-9-~]+\\={0,1})([A-Za-z0-9-~]*)\\&{0,1})*)$")	private String url;		public String getTime() {		return time;	}	public void setTime(String time) {		this.time = time;	}	public String getUrl() {		return url;	}	public void setUrl(String url) {		this.url = url;	}	public String getUserName() {		return userName;	}	public void setUserName(String userName) {		this.userName = userName;	}	public String getPassword() {		return password;	}	public void setPassword(String password) {		this.password = password;	}	public String getRepassword() {		return repassword;	}	public void setRepassword(String repassword) {		this.repassword = repassword;	}	public String getEmail() {		return email;	}	public void setEmail(String email) {		this.email = email;	}	public String getAge() {		return age;	}	public void setAge(String age) {		this.age = age;	}	public String getPhone() {		return phone;	}	public void setPhone(String phone) {		this.phone = phone;	}}

持久层

package cn.et;import javax.validation.Valid;import org.springframework.stereotype.Controller;import org.springframework.validation.BindingResult;import org.springframework.validation.FieldError;import org.springframework.web.bind.annotation.ModelAttribute;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestMethod;/** * 后台验证步骤 * 	1.javabean添加验证注解 * 	2.action中使用@Valid表示javabean 使用Errors或者BindingResult判断是否验证失败 *  3.出现jar包冲突4.3.2 *   * @author Administrator * */@Controllerpublic class RegController {	@RequestMapping(value="/reg",method=RequestMethod.POST)	public String reg(@ModelAttribute("user") @Valid UserInfo user,BindingResult errors){		//用于判断密码是否一致		if(!user.getPassword().equals(user.getRepassword())){			errors.addError(new FieldError("userInfo","repassword","两次密码不一致"));		}		if(errors.hasErrors()){																						return "/reg.jsp";		}		return "/suc.jsp";	}}
reg.jsp显示界面

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><%@taglib uri="http://www.springframework.org/tags/form" prefix="form"%><%String path = request.getContextPath();String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%>              My JSP 'MyJsp.jsp' starting page    	
用户名:
密码:
重复密码:
邮件:
年龄:
手机号码:
时间:
个人网址:

你可能感兴趣的文章
No devices detected. Fatal server error: no screens found
查看>>
db db2_monitorTool IBM Rational Performace Tester
查看>>
postgresql监控工具pgstatspack的安装及使用
查看>>
【JAVA数据结构】双向链表
查看>>
【JAVA数据结构】先进先出队列
查看>>
谈谈加密和混淆吧[转]
查看>>
乘法逆元
查看>>
Objective-C 基础入门(一)
查看>>
通过mavlink实现自主航线的过程笔记
查看>>
Flutter Boost的router管理
查看>>
iOS开发支付集成之微信支付
查看>>
Koa2框架原理解析和实现
查看>>
C++模板
查看>>
【C#】如何实现一个迭代器
查看>>
【C#】利用Conditional属性完成编译忽略
查看>>
hbase(1)---概述
查看>>
hbase(5)---API示例
查看>>
SSM-CRUD(1)---环境搭建
查看>>
Nginx(2)---安装与启动
查看>>
springBoot(5)---整合servlet、Filter、Listener
查看>>