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) {

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章