1. 程式人生 > >springmvc服務端校驗hibernate validation配置

springmvc服務端校驗hibernate validation配置

springmvc服務端校驗hibernate validation的配置

步驟如下:

0.需要引3個jar包
    hibernate-validator-4.3.0.Final.jar
    jboss-logging-3.1.0.CR2.jar
    validation-api-1.0.0.GA.jar



1.在src目錄下建立CustomValidationMessages.properties檔案(錯誤描述資訊)

2.在pojo中寫po中類的屬性中寫註解,我也就我們的限制條件
class User{
    @Size(min=1,max=10,message="{CustomValidationMessages檔案中的key字串}")

    private String username;
}
@Size(min=1,max=10)表示這個屬性的值長度位1到10

message 中填寫的是CustomValidationMessages檔案中的key值

注意:message需指定,否則校驗失敗沒有提示資訊


3.在Controller的類中的添加註解,已UserController為例子
class UserController{
    ....
    public String save(@Validated User user,BindingResult br){
        if(br.hasErrors()){
            //如果有錯誤就會進來

            List ls = bindingResult.getAllErrors();
            model.addAttribute("error", ls);
            return "login";
        }
        //其他程式碼
    } 
}
@Validated User user,BindingResult br
寫法固定@Validated Pojo pojo,BindingResult br

ls.get(0).getDefaultMessage()為錯誤資訊

4.springmvc.xml中的配置
下面寫法固定,只需變動的是指定properties檔案


<!-- 註解驅動 -->
    <mvc:annotation-driven conversion-service="conversionService" validator="validator"/>

    <bean id="validator"
        class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean">
        <!-- hibernate校驗器-->
        <property name="providerClass" value="org.hibernate.validator.HibernateValidator" />
        <!-- 指定校驗使用的資原始檔,在檔案中配置校驗錯誤資訊,如果不指定則預設使用classpath下的ValidationMessages.properties -->
        <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>

註解說明

@AssertTrue //用於boolean欄位,該欄位只能為true

@AssertFalse//該欄位的值只能為false

@CreditCardNumber//對信用卡號進行一個大致的驗證

@DecimalMax//只能小於或等於該值

@DecimalMin//只能大於或等於該值

@Digits(integer=2,fraction=20)//檢查是否是一種數字的整數、分數,小數位數的數字。

@Email//檢查是否是一個有效的email地址

@Future//檢查該欄位的日期是否是屬於將來的日期

@Length(min=,max=)//檢查所屬的欄位的長度是否在minmax之間,只能用於字串

@Max//該欄位的值只能小於或等於該值

@Min//該欄位的值只能大於或等於該值

@NotNull//不能為null

@NotBlank//不能為空,檢查時會將空格忽略

@NotEmpty//不能為空,這裡的空是指空字串

@Null//檢查該欄位為空

@Past//檢查該欄位的日期是在過去

@Size(min=, max=)//檢查該欄位的size是否在minmax之間,可以是字串、陣列、集合、Map

@URL(protocol=,host,port)//檢查是否是一個有效的URL,如果提供了protocolhost等,則該URL還需滿足提供的條件

@Valid//該註解只要用於欄位為一個包含其他物件的集合或map或陣列的欄位,或該欄位直接為一個其他物件的引用,

//這樣在檢查當前物件的同時也會檢查該欄位所引用的物件