数据校验的目的:
1.前端校验:通过js验证:数据长度,数据空,格式匹配
2.后端校验:避免出现脏数据,保证数据安全和完整性,原因用户直接跳过页面请求后端(一般在进行更新操作时需要使用)
手动校验(忽略)
自动校验:使用校验框架
1.添加依赖:
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>6.0.17.Final</version>
</dependency>
2.在SpringMVC配置文件中配置校验器:使用已开发的框架
<!--1.配置数据校验器-->
<bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean">
<!--指定实现接口的厂商-->
<property name="providerClass" value="org.hibernate.validator.HibernateValidator"/>
</bean>
<!--2.将校验器添加到注解中提供支持-->
<mvc:annotation-driven validator="validator"/>
3.在需要进行后端数据校验的实体的属性上设置校验注解
public class User {
@NotEmpty(message = "用户名不能为空")
@NotNull()
private String username;
@Size(min = 6,max = 12,message = "密码长度不合法")
private String password;
//省略其他代码
}
4.在控制器方法中开启校验,通过@Valib或@Validated标识参数(方法里的参数BindingResult是固定的,用来接收校验结果信息)
@RequestMapping("/login")
@ResponseBody
public String login(@Valid User user, BindingResult bindingResult){
if(bindingResult.hasErrors()){//返回true表示存在校验失败消息
List<FieldError> fieldErrors = bindingResult.getFieldErrors();
for (FieldError fieldError : fieldErrors) {
System.out.println(fieldError.getDefaultMessage());
}
return "error";
}
return "success";
}
5.通过前端页面进行测试
总结:
1.添加依赖
2.在SringMVC配置文件中开启校验
<!--开启注解驱动和注解校验-->
<mvc:annotation-driven validator="validator"/>
<!--注册校验器:并指定使用Hibernate的校验器-->
<bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean">
<!--指定服务提供商-->
<property name="providerClass" value="org.hibernate.validator.HibernateValidator"/>
</bean>
3.在Handler参数中,给需要进行校验的参数对象添加@Validated或@Valid
4.在Handler参数中,在需要校验的方法的参数对象后面添加一个BindingResult对象来接收校验结果信息
说明:如果参数列表中存在多个校验,每个@Valid后面跟着一个BindingResult,注意顺序
5.在Handler方法体中,调用BindingResult的hasErrors() 判断前端传递的参数是否符合校验规则,只要有一个不符合那么hasErrors方法的返回值都为true
6.在hasErrors的true逻辑中通过getAllErrors或getFieldErrors获取错误集合
7.遍历错误集合,调用每个对象的方法获取想要的错误信息(也可以直接将整个集合返回,让前端直接筛选[前端开发中多使用console.log()将返回的数据输出到控制台查看])
8.将封装好的错误信息返回给前端,前端再进行一些显示信息操作