zoukankan      html  css  js  c++  java
  • SpringMVC的数据校验如何实现呢?

    校验的方式

    • 添加jar包
    • 在springmvc.xml中配置validator校验器
    • validationMessageSource.properties
    • 在pojo中指定校验规则
    • controller中对其校验绑定进行使用
    • jsp页面

    案例实操

    Springmvc 本身没有校验功能,它使用 hibernate 的校验框架,hibernate 的校验框架和 orm 没有关系

    添加jar包

    在springmvc.xml中配置validator校验器

    基本上直接复制拿过去用即可。

    配置以下这些,相当于有人帮我们写好了校验代码,我们拿过来直接用就行了,所以需要进行配置。

    将validator注册到适配器中

    方式一(推荐)

    方式二:如果配置文件中使用的是非注解方式编写的适配器,则这样配置

    springmvc.xml配置校验器

        <!-- 校验器,配置validator -->
        <bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean">
            <property name="providerClass" value="org.hibernate.validator.HibernateValidator"></property>
            <property name="validationMessageSource" ref="validationMessageSource"></property>
        </bean>
        
        <!-- 配置validationMessageSource -->
        <bean id="validationMessageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
            <!-- 指定校验信息的资源文件的基本文件名称,不包括后缀,后缀默认是properties -->
            <property name="basenames">
                <list>
                    <value>classpath:validationMessageSource</value>
                </list>
            </property>
            <!-- 指定文件的编码 -->
            <property name="fileEncodings" value="utf8"></property>
            <!-- 对资源文件内容缓存的时间,单位秒 -->
            <property name="cacheSeconds" value="120"></property>
        </bean>
    

    validationMessageSource.properties

    该配置文件的作用就是存储校验失败时的提示文字信息的,也就是相当于将其提取出来放到配置文件中

    在pojo中指定校验规则

    列举两个校验规则(使用的是注解校验),notnull 和 size

    1、items.name.size 和 items.createtime.notnull:就是读取 validationMessageSource.properties 中的配置信息。从这里就可以理解该配置文件的意义,防止硬编码。

    2、使用注解对需要进行校验的属性进行绑定,而能够使这些注解生效的前提就是配置此前的几个步骤。

    controller中对其校验绑定进行使用

    1、@Validated 作用就是将 pojo 内的注解数据校验规则(@NotNull等)生效,如果没有该注解的声明,pojo 内有注解数据校验规则也不会生效

    2、BindingResult 对象用来获取校验失败的信息(@NotNull中的 message),与 @Validated 注解必须配对使用,一前一后

    3、代码中的逻辑应该很容易看懂,就是将 result 中所有的错误信息取出来,然后到原先的页面将错误信息进行显示,注意,要使用model 对象,则需要在形参中声明 Model model,然后菜能使用

    jsp页面

    扩展~分组校验

    什么是分组校验?

    校验规则是在 pojo 制定的,而同一个 pojo 可以被多个 Controller 使用,此时会有问题,即:不同的 Controller 方法对同一个 pojo 进行校验,此时这些校验信息是共享在这不同的 Controller 方法中,但是实际上每个 Controller 方法可能需要不同的校验,在这种情况下,就需要使用分组校验来解决这种问题,通俗的讲,一个 pojo 中有很多属性,controller 中的方法1可能只需要校验 pojo 中的属性1,controller 中的方法2只需要校验pojo中的属性2,但是 pojo中的校验注解有很多,怎样才能使方法1只校验属性1,方法二只校验属性2呢?就需要用分组校验来解决了。

    定义分组

    就是定义空的接口,接口类只作为这个分组标识来使用,看下面的用法,就知道其意义何在了

    使用分组

    controller方法

    在这个方法中,那么就只会校验 items 这个 pojo 中有 ValidationGroup1 这个分组的校验注解,而不会在校验其他的


    036823064)]

    controller方法

    在这个方法中,那么就只会校验 items 这个 pojo 中有 ValidationGroup1 这个分组的校验注解,而不会在校验其他的

    [外链图片转存中...(img-maQSAfRi-1599036823065)]

  • 相关阅读:
    css学习之LInk & import
    用javascript制作2048游戏的思路(原创若 转载请附上本链接)
    Sublime Text2中的快捷键一览表(Sublime 键盘快捷键大全 )
    《Scrum实战》第1次课课后任务
    反省读经教育理论的误区 ——关于十三岁之前理解的问题
    王守仁的学前教育思想
    孙氏太极拳--无极桩
    秘静克老人的站桩
    敏捷领域学习规划
    同侪隐修录 (2016-12-25 23:10:21)转载▼
  • 原文地址:https://www.cnblogs.com/lezijie/p/13602641.html
Copyright © 2011-2022 走看看