对于任何一个应用而言在客户端做的数据有效性验证都不是安全有效的,这时候就要求我们在开发的时候在服务端也对数据的有效性进行验证。
SpringMVC自身对数据在服务端的校验有一个比较好的支持,它能将我们提交到服务端的数据按照我们事先的约定进行数据有效性验证,对于不合格的数
据信息SpringMVC会把它保存在错误对象中,这些错误信息我们也可以通过SpringMVC提供的标签在前端JSP页面上进行展示。
注解形式:WebBindingInitializer的initBinder方法来设定。配置文件中通过mvc:annotation-driven的validator属性也可以指定全局的Validator。
在这里我定义的Validator是对所有的Controller都起作用。若要特定Controller具体有哪个特定类去验证,可以用@initBinder注解
上面的方法中用到了@Validated注解,表示对form这个对象进行检验(必须使用该注解标签,否则spring框架不会对其检验)。另外,我们的处理方法必须给定包含Errors的参数,在这里可以用Spring框架为我们提供的BindingResult,他是Errors子类。
(切记:使用了Errors参数就是告诉Spring关于表单对象数据校验的错误将由我们自己来处理,否则Spring会直接抛出异常,而且这个参数是必须紧挨着@Valid参数的,即必须紧挨着需要校验的参数,这就意味着我们有多少个@Valid参数就需要有多少个对应的Errors参数,它们是一一对应的。)
这样子一来我们把相关的校验信息(错误Msg)存放到当前的Errors对象中。接着我们就可以在我们的处理器方法中根据是否有校验异常信息来做不同的操作。在上面代码中我们定义了在有异常信息的时候就跳转到登陆页面。这样我们就可以在登陆页面上通过errors标签来展示这些错误信息了。
使用JSR-303 Validation进行验证
JSR-303是一个数据验证的规范,这里我不会讲这个规范是怎么回事,只会讲一下JSR-303在SpringMVC中的应用。JSR-303只是一个规范,而Spring也没有对这一规范进行实现,那么当我们在SpringMVC中需要使用到JSR-303的时候就需要我们提供一个对JSR-303规范的实现,Hibernate Validator是实现了这一规范的,这里我将以它作为JSR-303的实现来讲解SpringMVC对JSR-303的支持使用。
备:JSR-303来进行校验比使用Spring提供的Validator接口要简单的多。
具体需要的包(在这里我列出我所用的一些版本包和其需要的其他依赖包):
validation-api-1.1.0.Final.jar
hibernate-validator-5.0.2.Final.jar
(切记:hibernate-validator-5.x.x已经不兼容validation-api-1.0.x,这是因为在hibernate-validator-5.x.xhibernate-validator-5.x.x已经把旧的校验框架JSR-303,改变为JSR-349了。1、你把javax.validation更新到较高版本2、你把hibernate-validator换成4.x版本)
jackson-core-2.6.2.jar
jackson-annotation-2.6.2.jar
jackson-databind-2.6.2.jar
(备:jackson1.x版本的只有两个包,只能和hibernate-validatorj较低版本的使用,所以,低版本导2包就行,高版本导3包)
jboss-logging-3.3.0.Final.jar
classmate-1.1.0.jar(0.0这个包缺少会报什么filter的错误,包没找着,博主的切身经历啊- -....当初这问题寻思了好久)
话不多说,上图,看我的Spring-servlet.xml的配置:
在这里我告诉Spring框架,将由我自定义验证规则
未完待续....