springMVC中validation校验案例

springMVC中validation校验案例

validation校验相比于大部分前台js校验更加简单,因为在后台进行校验,安全性较高

1、导入支持的jar包
所需jar包
2、配置springMVC.xml
(1)不使用映射器和适配器的情况下

<!-- 可以替代映射器和适配器 -->
        <mvc:annotation-driven validator="validator"/>
        <!-- 校验器 -->
        <bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean">
            <!-- 注入Hibernate校验器 -->
            <property name="providerClass" value="org.hibernate.validator.HibernateValidator"/>
            <!-- 指定校验所使用的资源文件,如果不指定默认使用classes下面的 -->
            <property name="validationMessageSource" ref="messageSource"/>
        </bean>

        <!-- 校验错误信息配置文件 -->
        <bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
            <!-- 资源文件名 -->
            <property name="basenames">
                <list>
                    <value>
                        classpath:CustomValidationMessages
                    </value>
                </list>
            </property>
            <!-- 资源文件的编码格式 -->
            <property name="fileEncodings" value="utf-8"/>
            <!-- 对资源文件缓冲时间 -->
            <property name="cacheSeconds" value="120"/>
        </bean>

(2)使用映射器和适配器的情况

<!-- 注解映射器 -->
        <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"/>
        <!-- 注解适配器 -->
        <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
            <!-- 引用自定义属性编辑器 -->
            <property name="webBindingInitializer" ref="customBinder"/>
        </bean>

        <!-- 自定义的属性编辑器 -->
        <bean id="customBinder" class="org.springframework.web.bind.support.ConfigurableWebBindingInitializer">
            <property name="validator" ref="validator"/>
        </bean>

        <!-- 校验器 -->
        <bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean">
            <!-- 注入Hibernate校验器 -->
            <property name="providerClass" value="org.hibernate.validator.HibernateValidator"/>
            <!-- 指定校验所使用的资源文件,如果不指定默认使用classes下面的 -->
            <property name="validationMessageSource" ref="messageSource"/>
        </bean>

        <!-- 校验错误信息配置文件 -->
        <bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
            <!-- 资源文件名 -->
            <property name="basenames">
                <list>
                    <value>
                        classpath:CustomValidationMessages
                    </value>
                </list>
            </property>
            <!-- 资源文件的编码格式 -->
            <property name="fileEncodings" value="utf-8"/>
            <!-- 对资源文件缓冲时间 -->
            <property name="cacheSeconds" value="120"/>
        </bean>

3、创建CustomValidationMessages.properties
这里写图片描述
这里写图片描述
4、校验规则
在实体类中加入注解

public class User {
    private Integer uid;

    // 商品名称长度限制在1-30之间
    @Size(min = 1, max = 30, message = "{user.name.length.error}")
    private String username;

    @Size(min = 1, max = 30, message = "{user.password.length.error}")
    private String password;

    private String context;

    // 创建时间不能为空
    // 通过groups制定该校验属于哪个分组,可以制定多个分组
    @NotNull(message = "{user.createtime.is.notnull}", groups = { ValidGroup1.class })
    private Date createtime;

5、捕获异常的方法

    @RequestMapping("inserUser")
    // 每个需要校验的pojo前面都需要加Validdated,后面都加BindingResult bindingResult
    public String insertUser(@Validated User user, BindingResult bindingResult,
            Model model) {
        // 如果校验中存在错误
        if (bindingResult.hasErrors()) {
            List<ObjectError> errors = bindingResult.getAllErrors();
            // 将错误信息放入ModelAndView中
            model.addAttribute("errors", errors);
            for (ObjectError objectError : errors) {
                // 输出错误信息到控制台
                System.out.println(objectError.getDefaultMessage());
            }
            // 跳转回添加页面
            return "user/user_add";
        }

6、在页面简单展示错误信息

<c:forEach items="${errors }" var="e">
    ${e.defaultMessage }
</c:forEach>

7、分组校验
某些方法只想校验部分属性时使用
(1)创建分组接口
这里写图片描述

package com.yy.controller.validation;

/**
 * 校验分组:用于修改的校验
 * 
 * @author 杨扬 2017-3-21下午8:09:33
 */
public interface ValidGroup1 {
    // 接口不定义方法,只定义标识哪些校验规则属于ValidGroup1

}

(2)通过groups在po类中确定分组

// 通过groups制定该校验属于哪个分组,可以制定多个分组
    @NotNull(message = "{user.createtime.is.notnull}", groups = { ValidGroup1.class })
    private Date createtime;

(3)在controller的方法中定义使用校验的分组

// 在@ValidTed(value={}),在value中定义ValidGroup1分组的校验
    public String insertUser(
            @Validated(value = { ValidGroup1.class }) User user,
            BindingResult bindingResult, Model model) {

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值