学习SpringMVC的时候顺便看了一下数据验证的东西。分享一下:
在任何时候,当你要处理一个应用程序的业务逻辑,数据校验是你必须要考虑和面对的事情。应用程序必须通过某种手段来确保输入进来的数据从语 义上来讲是正确的。在通常的情况下,应用程序是分层的,不同的层由不同的开发人员来完成。很多时候同样的数据验证逻辑会出现在不同的层,这样就会导致代码 冗余和一些管理的问题,比如说语义的一致性等。为了避免这样的情况发生,最好是将验证逻辑与相应的域模型进行绑定。
Bean Validation 为 JavaBean 验证定义了相应的元数据模型和 API。缺省的元数据是 Java Annotations,通过使用 XML 可以对原有的元数据信息进行覆盖和扩展。在应用程序中,通过使用 Bean Validation 或是你自己定义的 constraint,例如 @NotNull
, @Max
, @ZipCode
, 就可以确保数据模型(JavaBean)的正确性。constraint 可以附加到字段,getter 方法,类或者接口上面。对于一些特定的需求,用户可以很容易的开发定制化的 constraint。Bean Validation 是一个运行时的数据验证框架,在验证之后验证的错误信息会被马上返回。(摘抄)
下面分享实例:(使用SpringMVC创建一个简单动态网站项目)
1.添加bean-validator.jar包
下载地址:http://download.youkuaiyun.com/detail/iphone137/8191045
2.在实体类上添加标签
@NotEmpty(message = "用户名密码不能为空")
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
@Size(min=3,max=10,message="密码长度应该在3-10之间")
public String getPassWord() {
return passWord;
}
public void setPassWord(String passWord) {
this.passWord = passWord;
}
@Email(message = "邮箱格式不正确")
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
3.在Controller中方法参数添加 @Validated,和返回信息BindingResult(BindingResult一定要紧跟 @Validated参数之后)
public String add(@Validated User user,BindingResult br) {//BindingResult一定要紧跟@Validated参数之后
if(br.hasErrors()){
return "user/add";
}
users.put(user.getUserName(),user);
return "redirect:/user/users";
}
4.在jsp页面上添加错误提示<form:errorspath="userName"/>绑定实体类字段
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>添加用户</title>
</head>
<body>
<form:form method="post" modelAttribute="user">
UserName:<form:input path="userName" /><form:errors path="userName"/>
<br />
password:<form:password path="passWord" /><form:errors path="passWord"/>
<br />
Email:<form:input path="email" /><form:errors path="email"/>
<br />
<input type="submit" value="提交" />
</form:form>
</body>
</html>
参考文章:http://www.oschina.net/question/129540_20649