数据校验是 Web 应用必须处理的内容,Spring MVC 提供了两种方法来对用户的输入数据进行校验,一种是 Spring 自带的 Validation 校验框架,另一种是利用 JRS-303 验证框架进行验证。
接下用我们使用SpringMVC来完成数据校验:
1、新建动态页面:Deposit.jsp
页面展示:
2、创建javaBean:DepositBean,并添加注解:
SpringMVC是基于正则表达式验证,通过添加注解来规定规则(正则表达式只针对于字符串)
public class Deposit {
/**
* @NotEmpty:不为空
* regexp:正则表达式判定规则
* message:错误提示信息
* @DateTimeFormat:日期格式
*/
@NotEmpty(message="账号不能为空")
private String account;
@Pattern(regexp="\\w{4,25}",message="用户名为4到25个字母、数字或下划线")
private String name;
@Pattern(regexp="\\S{6,25}",message="密码为6到25个非空白字符")
private String password;
@Pattern(regexp="\\d{18}",message="身份证为18位数字")
private String id;
@NotEmpty(message="金额不能为空白")
private String amount;
@Pattern(regexp="1|2|3|4|5",message="存款年限为1-5年")
private String duration;
@DateTimeFormat(pattern="yyyy-mm-dd")
private Date date;
@PhoneNo
private String phone;
public String getAccount() {
return account;
}
public void setAccount(String account) {
this.account = account;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getAmount() {
return amount;
}
public void setAmount(String amount) {
this.amount = amount;
}
public String getDuration() {
return duration;
}
public void setDuration(String duration) {
this.duration = duration;
}
public Date getDate() {
return date;
}
public void setDate(Date date) {
this.date = date;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
}
3、创建页面控制器类:DepositController.java
@Controller //指明页面控制器
public class DepositController {
/**
* 初步校验
*/
@RequestMapping("deposit") //BindingResult bindingResult 用户获取校验结果
public String saveMoney( @Valid Deposit deposit,BindingResult bindingResult) { //@Valid 用于校验绑定数据,放置数据前面
//判读数据校验结果
if(bindingResult.hasErrors()) {
//获取校验信息
List<FieldError> fieldErrors=bindingResult.getFieldErrors();
System.out.println("校验错误数量:"+bindingResult.getFieldErrorCount());
System.out.println("校验错误信息:");
for(FieldError error:fieldErrors) {
System.out.println("校验错误属性名:"+error.getField());
System.out.println("校验错误提示信息:"+error.getDefaultMessage());
}
return "Deposit";
}
return "DepositSuccess";
}
运行服务器,点击存款,控制台显示:
由于我们现在没有输如数据,所以控制台显示的全是错误信息,接下来我们就要把错误信息返回给页面,但是,如果验证成功,我们就在输入框保存输入的值,页面不显示错误信息。
思路:现在我们已经获取到错误属性名和提示信息,通过模型数据把信息传给页面,页面通过EL表达式取出值放在正确的位置即可!
4、二级校验,contronller修改
页面修改:
解释:value={###} 用于提交验证输入的值
${###}用于显示提示信息
刷新页面显示提示信息
输入数据并点击存款按钮
如果有数据,并书写正确,提示信息消失!
简单验证完成!
最后,再加一些注解说明
@AssertFalse
验证的数据类型 :Boolean,boolean
说明 :验证注解的元素值是false
@AssertTrue
验证的数据类型 :Boolean,boolean
说明 :验证注解的元素值是true
@NotNull
验证的数据类型 :任意类型
说明 :验证注解的元素值不是null
@Null
验证的数据类型 :任意类型
说明 :验证注解的元素值是null
@Min(value=值)
验证的数据类型 :BigDecimal,BigInteger, byte,short, int, long,等任何Number或CharSequence(存储的是数字)子类型
说明 :验证注解的元素值大于等于@Min指定的value值
@Max(value=值)
验证的数据类型 :和@Min要求一样
说明 :验证注解的元素值小于等于@Max指定的value值
@DecimalMin(value=值)
验证的数据类型 :和@Min要求一样
说明 :验证注解的元素值大于等于@ DecimalMin指定的value值
@DecimalMax(value=值)
验证的数据类型 :和@Min要求一样
说明 :验证注解的元素值小于等于@ DecimalMax指定的value值
@Digits(integer=整数位数, fraction=小数位数)
验证的数据类型 :和@Min要求一样
说明 :验证注解的元素值的整数位数和小数位数上限
@Size(min=下限, max=上限)
验证的数据类型 :字符串、Collection、Map、数组等
说明 :验证注解的元素值的在min和max(包含)指定区间之内,如字符长度、集合大小
@Past
验证的数据类型 :java.util.Date,java.util.Calendar,Joda Time类库的日期类型
说明 :验证注解的元素值(日期类型)比当前时间早
@Future
验证的数据类型 :与@Past要求一样
说明 :验证注解的元素值(日期类型)比当前时间晚
@NotBlank
验证的数据类型 :CharSequence子类型
说明 :验证注解的元素值不为空(不为null、去除首位空格后长度为0),不同于@NotEmpty,@NotBlank只应用于字符串且在比较时会去除字符串的首位空格
@Length(min=下限, max=上限)
验证的数据类型 : CharSequence子类型
说明 :验证注解的元素值长度在min和max区间内
@NotEmpty
验证的数据类型 :CharSequence子类型、Collection、Map、数组
说明 :验证注解的元素值不为null且不为空(字符串长度不为0、集合大小不为0)
@Range(min=最小值, max=最大值)
验证的数据类型 :BigDecimal,BigInteger,CharSequence, byte, short, int, long等原子类型和包装类型
说明 :验证注解的元素值在最小值和最大值之间
@Email(regexp=正则表达式,flag=标志的模式)
验证的数据类型 :CharSequence子类型(如String)
说明 :验证注解的元素值是Email,也可以通过regexp和flag指定自定义的email格式
@Pattern(regexp=正则表达式,flag=标志的模式)
验证的数据类型 :String,任何CharSequence的子类型
说明 :验证注解的元素值与指定的正则表达式匹配
@Valid
验证的数据类型 :任何非原子类型
说明 :指定递归验证关联的对象;如用户对象中有个地址对象属性,如果想在验证用户对象时一起验证地址对象的话,在地址对象上加@Valid注解即可级联验证
注意:此处只列出Hibernate Validator提供的大部分验证约束注解,请参考hibernate validator官方文档了解其他验证约束注解和进行自定义的验证约束注解定义