校验的理解
项目中,通常使用最多就是前段校验,比如页面中的js校验。对于安全要求较高点建议在服务端Handler进行校验。
服务端校验
控制层 Controller:校验页面请求参数的合法性。在服务端控制层Controller校验不区分客户端类型(浏览器,手机客户端,远程调用
)校验一致
业务层 Service(使用较多):主要校验关键业务参数。仅限于Service接口中使用的参数。
持久层Dao:一般不校验。
springmvc校验
springmvc使用Hibernate的校验框架validation(和Hibernate没有任何关系)
校验思路
页面提交请求参数,请求到Controller方法中,使用validation进行校验。如果校验出错、将错误信息展示到页面
具体需求
商品修改添加校验(商品名称长度,生产日期非空校验),如果校验出错,在商品修改界面显示错误信息
环境准备
添加Hibernate的校验框架validation所需要的jar
配置校验器
执行Handler是适配器执行,所以最终将校验器注入到处理器适配器中
在springmvc.xml配置文件中,加入如下校验器代码
对以上校验器代码进行分析:
<bean id="validator" class ="org.springframework.validation.beanvalidation.localvolidatorfactoryBean">指定校验器接口
<property name="providerClass" value="org.hibernate.validator.HibernateVolidator"/>指定Hibernate校验器
<property name="validationMessageSource" ref="messageSource"/>指定校验使用的资源文件。在文件中配置校验错误信息。如果
不指定默认使用classpath下的ValidationMessage.properties
<!--校验错误信息配置文件-->
<bean id="messageSource"
class="org.springframework.context.support.ReloadaableResourceBundleMessageSource">
<!--资源文件名-->
<property name="basenames">
<list>
<value>classpath:CustomValidationMessage(资源文件名)</value>
</list>
</proterty>
</bean>
配置好了validator,将valiator校验器加到处理器适配器中
在pojo中添加校验的规则
需要再itemsCustom.java中添加校验规则
message是提示校验出错的提示信息,要避免使用硬编码将提示信息写死,应该在校验信息配置文件中使用键值对的形式
定义提示错误信息:
在商品提交的时候对形参进行校验
在你需要校验的pojo前面添加@Validated注解,在你需要校验的pojo后边添加@BindingResult bindingResult接收校验出错信息
注意:@Validated和@BindingResult bindingResult是配对出现。并且形参顺序固定的一前以后
在页面显示校验错误信息
需要再Controller方法中将页面错误信息传到界面
需要计入Modle
页面显示错误信息