应用场景
- 在实际的开发中,通常使用的是前端的校验,比如js校验,对于安全性较高的建议在 在服务器端也进行校验
- 服务器端校验,可以是在控制层controller,也可以是在业务层service
- Controller校验不区分客户端类型
- service主要校验关键的业务数据,仅限于service接口中使用的参数
springMVC中的Controller校验
- 搭建环境
- springMVC中使用hibernate的校验框架validation,validation和hibernate没有任何关系,使用这个框架需要导入jar包
- 配置校验器
- 在springmvc.xml配置文件中配置校验器
- 将校验器注入到HandlerAdapter中
<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="basenames">
<list>
<value>classpath:CustomValidationMessage</value>
</list>
</property>
<property name="fileEncodings" value="utf-8"/>
<property name="cacheSeconds" value="120"/>
</bean>
- 在pojo中添加校验
- 常用的注解
- 在pojo实体类的属性上添加校验注解
- 错误信息配置文件
- 捕获校验错误 信息
- 错误信息配置好了之后,需要在Controller方法中捕获校验结果中的错误信息,然后将这些 错误信息放到域对象中,这里使用Model,转发到页面显示
- ==注意:==
- 在Controller方法的参数列表中需要验证的pojo前添加注解@Validated
- 在Controller方法的参数列表中需要验证的pojo后需要添加一个参数BindingResult用来存放校验结果,通过这个对象可以获取校验的错误信息
- @Validated和BindingResult bindingResult是配对出现,他们之间的顺序是固定的
- ==注意==:校验的参数一定钥匙一个pojo类型
分组校验
- 概述:
- 如果有多个Controller要使用pojo,如果给这个pojo添加了 校验,就意味着使用它的Controller就要校验它指定的所有的属性,显然不能满足需求
- 通过定义多个校验分组来解决这个问题,
- 所谓的分组就是定义了一个接口,接口内没有任何成员,仅仅只是一个标识的作用
- 分组校验步骤:
- 定义一个校验分组
- 在pojo实体类中使用分组
- 在Controller方法列表中的注解@Validated的value属性指定使用这个分组