声明,使用 JDK8 、spring5.0.7 、idea2018.2
Spring MVC 提供了两种数据校验的方式:
基于 Validator 接口
使用 Annotaion JSR-303 标准进行校验
基于 Validator 接口的方式需要自定义 Validator 验证器,每一条数据的验证规则需要自己手动完成;使用 Annotaion JSR-303 标准则不需要自定义验证器,通过注解的方式可以直接在实体类中添加每个属性的校验规则,这种方式更加方便,实际开发中推荐使用。
Annotaion JSR-303标准参考:
https://blog.csdn.net/weixin_42323802/article/details/84000994
基于 Validator 接口
主要步骤为:
1、自定义校验器 StudentValidation,实现 Validator 接口
2、编写Controller 、对业务逻辑判断;
3、jsp页面通过form表单的post发送请求;
子模块目录结构如下:
model实体类;
public class Student {
private String name;
private String password;
}
/**
* @auther SyntacticSugar
* @data 2018/11/16 0016下午 10:46
* 自定义 校验器StudentValidator;
*/
public class StudentValidator implements Validator{
@Override
public boolean supports(Class<?> clazz) {
return Student.class.equals(clazz);
}
@Override
public void validate(Object target, Errors errors) {
// TODO Auto-generated method stub
ValidationUtils.rejectIfEmpty(errors, "name", null, "姓名不能为空");
ValidationUtils.rejectIfEmpty(errors, "password", null, "密码不能为空");
}
}
控制器 HelloHandler,业务方法 login 参数列表中的 @Validated 表示参数 student 是需要校验的对象,@BindingResult 用来存储错误信息,两者缺一不可,而且必须挨着写,中间不能有其他参数。
/**
* @auther SyntacticSugar
* @data 2018/11/16 0016下午 10:51
*/
@Controller
public class HelloHandler {
@GetMapping("/login")
public String login(Model model) {
model.addAttribute(new Student());
return "login";
}
// 校验结果 BindingResult
@PostMapping("/login")
public String login(@Validated Student student, BindingResult bindingResu