验证方式
用户在前端页面上填写表单时,前端js程序会校验参数的合法性
当数据到了后端,为了防止恶意操作,保持程序的健壮性
后端同样需要对数据进行校验
JSR303
是一套JavaBean参数校验的标准,定义了很多常用的校验注解
可以直接将这些注解加在我们JavaBean的属性上面
就可以在需要校验的时候进行校验了
引入jar包
validation-api-1.1.0. Final.jar:JDK的接口
hibernate-validator-5.2.0.Final.jar是对上述接口的实现
<!--jsr 303-->
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>1.1.0.Final</version>
</dependency>
<!-- hibernate validator-->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>5.2.0.Final</version>
</dependency>
JavaBean的属性校验
通过给JavaBean配置注解
可以实现对属性的验证
@Validated
public class User {
// 必须不为 null,
// 大小是 10
@NotNull
@Size(min = 10, max = 10)
private String id;
// 必须不为空
@NotEmpty
private String userName;
// 必须不为空
@NotEmpty
private String password;
// 必须是一个电子信箱地址
@Email
private String email;
}
Form表单的校验
一个@Valid的参数
必须紧挨着一个BindingResult 参数
否则,spring会在校验不通过时直接抛出异常
BindingResult对象
用于获取校验失败情况下的反馈信息
@RequestMapping("/login")
@ResponseBody
public String testValid(@Valid User user, BindingResult result){
if (result.hasErrors()){
List<ObjectError> errorList = result.getAllErrors();
for(ObjectError error : errorList){
System.out.println(error.getDefaultMessage());
}
}
return "test";
}
程序的数据校验
在整个程序的任何地方
都可以调用JSR303 API去对数据进行校验
然后,将校验后的结果返回
ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
Validator validator = factory.getValidator();
Set<ConstraintViolation<User>> violations = validator.validate(user);
注意
数据类型
对于某一种验证规则
是适用于一种数据类型的,否则会报错