SpringMVC的数据校验

Springmvc-Validate(数据校验)

数据校验概述

1、项目中,通常使用较多是前端的校验,比如页面中js校验。对于安全要求较高点建议在服务端进行校验。

2服务端校验:

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

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

-持久层dao:一般是不校验的。

3、springmvc使用hibernate的校验框架validation

-校验思路:

-页面提交请求的参数,请求到controller方法中,使用validation进行校验。

-如果校验出错,将错误信息展示到页面

4、数据校验步骤

-springmvc数据校验步骤

1、导入校验jar文件

 <dependency>
        <groupId>javax.validation</groupId>
        <artifactId>validation-api</artifactId>
        <version>2.0.1.Final</version>
    </dependency>
    
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-validator</artifactId>
        <version>6.1.0.Final</version>
    </dependency>

2、配置校验器

 <!-- 配置数据校验的校验器bean 
             
              --> 
              <bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean">
                  <property name="providerClass" value="org.hibernate.validator.HibernateValidator"></property>
                  <property name="validationMessageSource" ref="messageResource"></property>
              </bean> 
               <!-- 校验信息提供的资源文件bean -->
               <bean id="messageResource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
                   <property name="basenames">
                       <list>
                           <value>classpath:validationMessageResource</value>
                       </list>
                   </property>
               <property name="fileEncodings" value="utf-8"></property>
               </bean>

3、校验器注入到处理器适配器中

 这段配置validator属性意思是:在调用controller方法之后,马上 让数据校验bean开始工作,对数据进行校验
                <mvc:annotation-driven validator="validator"></mvc:annotation-driven>  

 

4、添加校验规则

在domain包里的类添加校验规则

5、错误信息文件

把配置文件放到类路径中

6、捕获错误信息

//如果controller方法绑定的参数需要框架帮你校验,那么你要说一声--在参数前面加个注解@Validated
    @RequestMapping("/addProduct.do")
    public String addProduct(@Validated Product product ,BindingResult bindingResult,Model model) {
        //当进入到本方法时,参数校验应该已经搞定了,我们可以获取校验的结果了,可以通过绑定参数bindingResult拿到
        if(bindingResult.hasErrors()) {
            List<FieldError> list=bindingResult.getFieldErrors();
            
            for(FieldError fe:list) {
                System.out.println(fe.getDefaultMessage());
            }
        }

7、显示错误信息

在后台controller

//校验完了想返回页面查询校验出错信息怎么办?
        model.addAttribute("fieldErrors",bindingResult.getFieldErrors());
        model.addAttribute("product", product);

在jsp页面

<!-- 页面怎样展示出错数据呢?c标签 -->
<c:if test="${fieldErrors!=null}">
    <c:forEach items="${fieldErrors}" var="f">
    ${f.defaultMessage}
    </c:forEach>
</c:if>
<form action="${pageContext.request.contextPath}/addProduct.do" method="post">
商品名称:<input type="text" name="name" value="${product.name}"/><br>
商品单价:<input type="text" name="price" value="${product.price}"/><br>
生产日期:<input type="text" name="birth" value="${product.birth}"/><br>
商品描述:<input type="text" name="desc" value="${product.desc}"/><br>
<input type="submit" value="添加"/>

</form>

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值