重点: 掌握数据校验配置及使用
定义: 数据校验就是对数据的有效性进行校验
确保数据正确性,针对错误数据要有相应的处理方式
数据校验的两种方式:
- 编程式数据校验
- 声明式数据校验(JSR-303规范) 重点
编程式数据校验:
1、提供一个数据校验对象
// 引入自定义数据校验器
private UserValudator userValudator = new UserValudator();
2、编写数据校验器
/**
* 用户的数据校验器
* @author Administrator
*
*/
public class UserValudator implements Validator {
// 验证是否是我们要校验的对象
public boolean supports(Class<?> clazz) {
return UserModel.class.equals(clazz);
}
// 数据校验方法
public void validate(Object obj, Errors errors) {
// 采用工具类
ValidationUtils.rejectIfEmpty(errors, "userName", "user.userName.notnull");
// 采用参数对象的属性进行具体的规则制定
UserModel user = (UserModel)obj;
if(null != user &&
(null == user.getPassword() || "".equals(user.getPassword()))){
errors.rejectValue("password", "user.password.notnull");
}
//用户名不能是 管理员
if("root".equals(user.getUserName()) || "admin".equals(user.getUserName())){
errors.reject("user.username.forbiden");
}
}
}
3、进行数据校验
// 处理请求方法
@RequestMapping("validate.do")
public String validateUser(UserModel user,Errors errors){
// 对获取的参数进行校验
userValudator.validate(user, errors);
//判断是否通过了数据校验
if(errors.hasErrors()){
// 如果有错误信息,那么返回错误页面
return "error";
}
return "success";
}
/**
* 验证编程式数据校验
* @author Administrator
*
*/
@Controller
@RequestMapping("/user")
public class UserController {
// 引入自定义数据校验器
private UserValudator userValudator = new UserValudator();
// 处理请求方法
@RequestMapping("validate.do")
public String validateUser(UserModel user,Errors errors){
// 对获取的参数进行校验
userValudator.validate(user, errors);
//判断是否通过了数据校验
if(errors.hasErrors()){
// 如果有错误信息,那么返回错误页面
return "error";
}
return "success";
}
}
声明式数据校验(很重要、很常用)
1、 在原有包基础上引入:
validation-api-1.0.0.GA .jar :JSR303 规范API 包
hibernate-validator-4.3.2.Final.jar :JSR303 规范实现包 Hibernate Validator
jboss-logging-3.1.0.CR2.jar : 依赖的包
配置文件当中引入: <mvc:annotation-driven/>
此处是链接: hibernate validator 常见注解
2、声明式数据校验读取自定义的国际化资源文件
配置文件添加:
<!-- 国际化 -->
<bean name="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
<property name="basename" value="classpath:resource/messages"></property>
<property name="fileEncodings" value="utf-8"></property>
</bean>
3、在实体类中添加标签
/**
* 学生模型
* @author Administrator
*
*/
public class StudentModel {
@NotNull(message="{studen.studentName.notnull}")
private String studentName;
@Email(message="{studen.email.notok}")
private String email;
@Length(min=5,max=20,message="{studen.address.tolongortoshort}")
private String address;
@Min(value=18,message="{studen.age.mustolderthan18}")
private Integer age;
}
控制器中注释如下:
/**
* 演示声明式数据校验
* @author Administrator
*
*/
@Controller
@RequestMapping("/student")
public class StudentController {
// 处理请求的方法
@RequestMapping("validate.do")
public String validateStu(@Valid StudentModel student,Errors errors){
if(errors.hasErrors()){
return "sterror";
}
return "success";
}
}