SpringMVC学习之服务器端校验

1.校验理解

通常使用较多的是前端校验,比如页面js校验,对于安全性要求高一点的建议在服务器端校验。

服务器端校验:

控制层controller:校验页面请求参数的合法性,在服务器端控制层controller校验不区分客户端类型(浏览器,手机客户端,远程校验)

业务层service:(使用较多)主要校验关键业务参数,仅限于service接口使用的参数

持久层dao:一般不进行校验

2.springmvc校验

springmvc使用hibernate的校验框架validation

校验思路:

页面提交请求的参数,请求到controller方法中,使用validation进行校验,如果校验出错,将错误信息展示到页面

3.环境准备

hibernate的validation所需的jar包

hibernate-validation-4.3.0.Final.jar

jboss-logging-3.1.0.CR2.jar

validation-api-1.0.0.GA.jar

4.配置校验器

 

<bean id="validation" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean">
   <!--校验器-->
  <property name="providerClass" value="org.hibernate.validation.HibernateValidator" />
 <!--指定校验使用的资源文件,在文件中进行配置校验错误的信息,如果不指定则默认为classpath下的ValidationMessage.properties-->
   <property name="validationMessageSource" ref="messageSource"/>
</bean>

<bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
     <property name="basenames">
               <list>
                    <value>classpath:CustomValidationMessage</value><!--这里不加。properties是因为上面property中的
name是basenames-->
               </list>
      </property>
<!--文件编码方式-->
      <property name="fileEncodings" value="utf-8" />
<!--对资源文件内容缓存时间单位是秒,120秒后重新加载-->
       <property name="cacheSeconds" value="120" />
</bean>

PS:value 中的值在idea 中会出现红色错误,不影响使用

 

 

 

 

5.校验器注入到处理器适配器
<mvc:annotation-driven validator="validation"/>
6.在pojo中添加校验规则
如在字段上加一行代码
@Size(min=1,max=30,message="{资源文件的key值,用大括号括起来}")
private String name;
上面的两行代码表示校验名称在1到30个字符之间,message表示出错提示信息,
不在上面配置出错信息,就配置到上面的资源文件中,防止硬编码(资源文件中例:item.name.length.error=内容)

 

7.配置 .properties文件

item.name.length.error=字符长度不合适

8.在controller中进行校验捕获

将页面提交过来的pojo进行校验,在controller的pojo形参前加如:@Validated Item item,后面再加一个参数 BindingResult bindingResult) 

如:

 

public String  index(@Validated Item item , BindingResult bindingResult) {return null;}


注:1.在需要校验的pojo前面加@Validated在需要校验的pojo后面加BindingResult bindingResult 接收校验的出错信              息。

 

        2.多个需要校验的,则@Validated 和 BindingResult bindingResult是配对出现的,并且顺序是固定的一前一后

在controller中获取校验错误信息:

 

if(bindingResult.hasErrors()) {
   List<ObjectError> allErrors = bindingResult.getAllErrors();
   for(ObjectError objectError:allErrors) {
              输出(objectError.getDefaultMessage());}}


用来测试是不是捕获了错误信息

 

 

9.在页面显示校验的错误信息

需要在controller方法中将错误信息传到页面,使用Model,return的时候返回该页面

(具体的页面的修改,如何将错误信息显示在特定的位置这里不做说明)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值