zoukankan      html  css  js  c++  java
  • Springmvc_validation 效验器

    springmvc-validation效验器的使用介绍

      对于任何一个应用来说,都会做数据的有效性效验,但是只在前端做并不是很安全,考虑到安全性這个时候会要求我们在服务端也对数据进行有效验证,springmvc自身对数据在服务端有一个比较好的支持,springmvc能将我们前台提交的数据按照我们事先定下的规则,进行效验判断,对于不合格的数据信息,springmvc会把他保存到一个BindingResult 的类里面,这里面存放是错误集合,从而言之就可以把这些错误信息输出到jsp页面。

    使用validation接口进行验证:

        在我们注解驱动中注入validation 效验器<mvc:annotation-driven conversion-service="conversionService" validator="validator"/> 

    所需依赖的jar包:

       

    springmvc配置参考:

      这里我们指定了资源文件,以及一些常用配置,往后错误消息配置到CustomValidationMessage.properties 中以key value 形式读取

     1 <!--hibernate-validator 效验器 
     2         org.springframework.validation.beanvalidation.LocalValidatorFactoryBean 這个是spring-context 提供的效验的接口
     3     -->
     4     <bean id = "validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean">
     5         <!-- hibernate的效验器 -->
     6             <property name="providerClass" value="org.hibernate.validator.HibernateValidator" />
     7         <!-- 加载资源文件,在指定文件中配置错误信息如果不加载默认会去找classpath下的ValidationMessage.properties -->
     8             <property name="validationMessageSource" ref ="messageSource"></property>
     9     </bean>
    10     <bean id = "messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
    11         <!-- 加载资源文件名
    12             basenames:不用加properties
    13     --> 
    14         <property name="basenames">
    15             <list>
    16                 <value>classpath:CustomValidationMessage</value>
    17             </list>
    18         </property>
    19         <!-- 资源文件的编码格式 -->
    20         <property name="defaultEncoding" value="UTF-8"/>
    21         <!-- 加载超时 120 秒 重新加载-->
    22         <property name="cacheSeconds" value="120"/> 
    23     </bean>

    我们实体类pojo 的参考:

     1     //效验名称在1 到 10 字符之间 不建议在里面直接写message 建议写在配置文件里面以国际化方式去读取错误信息
     2     @Size(min=2,max=10,message="{items.name.length.error}")
     3     @NotNull(message="{items.name.isNull}")
     4     private String name;
     5     //非空的效验
     6     @NotNull(message="{items.createtime.isNull}")
     7     private Date createtime;
     8     
     9     @NotNull(message="{items.detail.isNull}")
    10     private String detail;

    controller代码参考:

      在你需要效验的pojo前面添加@Validated 表示这是需要效验,在pojo 后面添加BindingResult 来接受它效验的错误信息

      注意:@Validated 和BindingResult 是配对出现,一前一后方式,这本案例中只是简单实现了這个功能,但并不是完整的。

     1 /**
     2      *     商品信息提交的方法
     3      * @return   重定向的使用
     4      * @throws Exception
     5      * @Validated: 注解效验器
     6      * BindingResult:接受错误信息 9      */
    10     @RequestMapping("/editItemsSubmit")
    11     public String editItemsSubmit(Model model, Integer id,@Validated ItemsCustom itemsCustom ,BindingResult bindingResult)throws Exception{
    12         if (bindingResult.hasErrors()) {
    13             List<ObjectError> itemsErrorList = bindingResult.getAllErrors();
    14             for(ObjectError objectError:itemsErrorList){
    15                 System.out.println(objectError.getDefaultMessage());
    16             }    
    17             model.addAttribute("itemsErrorList", itemsErrorList);
    18             return "items/editItems";
    19         }
    20         // 调用service 里面的接口方法 
    21         itemsService.updateItems(id, itemsCustom);
    22         // 使用重定向到
    23         //    queryitems.do return "redirect:queryItems.do"; 
    24         //使用forward  可以在其他页面获取值 对象等
    25         //return "forward:queryItems.do"; 
    26         return "success"; 
    27     }

    页面参JSP考代码:

      测试代码打印出错误消息

    1     <c:if test="${itemsErrorList != null }">
    2         <c:forEach items="${itemsErrorList }" var="error" varStatus="index">
    3             ${error.defaultMessage}
    4         </c:forEach>
    5     </c:if>

    在资源文件中配置错误信息CustomValidationMessage.properties:

    1 # 配置效验器的错误信息,key value 形式
    2                         # items 的错误配置
    3 items.name.length.error=请输入2到10个字符的商品名称!
    4 items.name.isNull=商品名称不能为空!
    5 items.createtime.isNull=请输入商品的生产日期!
    6 items.detail.isNull=商品描述不能为空!

    Validation 效验常用限制注解:

      @Null:限制只能为null

      @NotNull:限制必须不能为空

      @AssertFalse 限制必须为false

      @AssertTrue 限制必须为true

      @DecimalMax(value) 限制必须为一个不大于指定值得数字

      @DecimalMax(value)限制必须为一个不小于指定值得数字

      @Digits(integer,fraction)限制必须为一个小数,且整数部分的位数不能超过integer,小数部分不能超过fraction

      @Futrue 限制必须为一个将来的日期

      @Max(value) 限制必须为一个不大于指定值得数字

      @Min(value)限制必须为一个不小于指定值得数字

      @Past限制必须为一个过去的时间

      @Pattern(value)限制为符合指定的正则表达式

      @Size(max,min)限制字符长度在min 到 max 之间

  • 相关阅读:
    【乱侃】How do they look them ?
    【softeware】Messy code,some bug of Youdao notebook in EN win7
    【随谈】designing the login page of our project
    【web】Ad in security code, making good use of resource
    SQL数据库内存设置篇
    关系数据库的查询优化策略
    利用SQL未公开的存储过程实现分页
    sql语句总结
    sql中使用cmd命令注销登录用户
    SQLServer 分页存储过程
  • 原文地址:https://www.cnblogs.com/tanglie/p/6755186.html
Copyright © 2011-2022 走看看