springMVC中validation校验案例

来源:互联网 发布:求推荐淘宝美国代购店 编辑:程序博客网 时间:2024/05/30 23:48

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