1、数据的校验
(1) 前台的数据校验
主要的作用就是为了提交数据的有效性的检查
(2)后端的数据校验
主要功能就是为了防止 提交脏数据
脏数据可以来源于第三方
2、前端验证:JS验证
<script>
function addClasses (){
var className=$("[name=className]").val();
if (className==""){
$("[name=className]").parent().prop("style","border: 1px solid red")
return;
}else {
$("[name=className]").parent().prop("style","")
}
}
......
</script>
3、后端验证:Hibernate Validator
(1)导入依赖
<!--导入Validator的相关包 (后端验证)-->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>5.4.1.Final</version>
</dependency>
(2)spring-mvc.xml中配置Hibernate-validator
<!--配置Hibernate-validator和Spring整合 -->
<!--这里的这个认证器 使用的是 Spring的 -->
<bean id="validator"
class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean">
<!--要整合的认证器的类的名字 -->
<property name="providerClass" value="org.hibernate.validator.HibernateValidator" />
<!--在认证的时候认证失败的时候的提示信息 -->
<!-- <property name="validationMessageSource" ref="messageSource"/> -->
</bean>
<bean id="messageSource"
class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
<property name="useCodeAsDefaultMessage" value="false" />
<property name="defaultEncoding" value="UTF-8" />
<property name="cacheSeconds" value="60" />
</bean>
(3)实体类上加注释
@NotNull(message = "班级名不能为空")
@NotEmpty(message = "班级名不能为空字符串")
@Length(min = 5,max = 10,message = "班级名长度在5到10之间")
private String className;
@Future(message = "输入日期不能小于当前日期")//必须是Date类型
@DateTimeFormat(pattern = "yyyy-mm-dd")//springmvc中传入字符串转成date类型
private Date classDate;
(4)控制器
@ResponseBody
@RequestMapping("/class_add")
//这个里面就封装了错误信息 而且这个BindingResult不能单用 必须和@Valid一起使用
public ResultMessage addClasses(@Valid Classes classes,BindingResult result){
ResultMessage resultMessage=null;
//首先要看 有没有校验出错
int errorCount=result.getErrorCount();
if(errorCount>0){ //说明有校验出错的地方
//获取所有的错误
List<FieldError> errors=result.getFieldErrors();
StringBuilder sb=new StringBuilder();
//遍历这里面所有的错误
for (FieldError fieldError : errors) {
String msg=fieldError.getDefaultMessage();
sb.append(msg);
}
resultMessage=new ResultMessage(500,sb.toString());
}else {
int count=classesService.addClasses(classes);
if (count>0){
resultMessage=new ResultMessage(200,"班级添加成功!");
}else {
resultMessage=new ResultMessage(500,"班级添加失败!");
}
}
return resultMessage;
}
4、已经做了前端验证,为什么还要做后端验证?
用户可能不通过前端表单进行提交数据,可能用第三方软件Postman进行数据提交。
5、既然后端验证更加严谨,为什么还要做前端验证?
前端验证可以过滤掉大量脏数据,减轻服务器压力。