1.在实体类中添加校验规则
@notNull 不能为null
@notEmpty 不能为空字符串
@NotBank 不能为null和空字符串
@pattern 正则验证
@NotBlank(message="用户名不能位空",groups= {RegisterValidate.class})
@Pattern(regexp="[\\u4e00-\\u9fa5\\w]{3,18}" ,message="用户名必须3-18位的中文或者数字字母下划线",groups= {RegisterValidate.class})
private String username;
@NotBlank(message="密码不能为空",groups= {RegisterValidate.class})
@Pattern(regexp="[a-zA-Z][\\w!@#~$%^&*\\(\\)]{5,17}" ,message="密码必须6-18位 且以字母开头",groups= {RegisterValidate.class})
private String password;
@NotBlank(message="手机号不能为空",groups= {RegisterValidate.class})
@Pattern(regexp="1[34578]\\d{9}" ,message="请输入正确的手机号",groups= {RegisterValidate.class})
private String tel;
2.controlle层开启对对象的校验
对传入的实体参数前添加@validated,并加入参数BindingResult,用于封装校验的结果
/**
* 对注册界面的后台校验
*
* @Validated 开启对SUser实体的校验
* BindingResult 封装了数据校验的结果
* @param user
* @param result
* @return
*/
@RequestMapping("validate")
public ModelAndView validate(@Validated(value=RegisterValidate.class) SUser user,BindingResult result,
ModelMap modelmap ) {
System.out.println("-----------"+user);
//用于数据回显
modelmap.addAttribute("user", user);
//FieldError封装了一个属性的 错误信息
//多个属性的错误信息就是List集合
List<FieldError> errorList = result.getFieldErrors();
//判断 数据校验到底有没有错误
if (result.hasErrors()) {
for (FieldError fieldError : errorList) {
System.out.println(fieldError.getField() + "-->"
+ fieldError.getDefaultMessage());
// 错误信息 存到 域对象中
modelmap.addAttribute("error_" + fieldError.getField(),
fieldError.getDefaultMessage());
}
// 错误信息应该要显示到界面上
return new ModelAndView("/Register");
}
//生成注册时间
Date d = new Date();
//将注册时间添加到SUser对象
user.setUserRegtime(d);
String uuid =uuid();
user.setUserid(uuid);
//刷新user对象
modelmap.addAttribute("user", user);
// 调用业务逻辑保存用户
int row = userser.addUser(user);
return new ModelAndView("/tips");
}
3.如果一个实体在一个项目中有多套校验规则,就需要对校验规则进行分组
3.1定义一个接口 分组接口
3.2在实体类中声明 该组验证对哪组有效,添加group={接口名.Class}
3.3 在controller层,@validated中添加value={接口名.Class}
该接口里面什么也不用写
public interface RegisterValidate {
}