springmvc服務端校驗hibernate validation配置
springmvc服務端校驗hibernate validation的配置
步驟如下:
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=)//檢查所屬的欄位的長度是否在min和max之間,只能用於字串
@Max//該欄位的值只能小於或等於該值
@Min//該欄位的值只能大於或等於該值
@NotNull//不能為null
@NotBlank//不能為空,檢查時會將空格忽略
@NotEmpty//不能為空,這裡的空是指空字串
@Null//檢查該欄位為空
@Past//檢查該欄位的日期是在過去
@Size(min=, max=)//檢查該欄位的size是否在min和max之間,可以是字串、陣列、集合、Map等
@URL(protocol=,host,port)//檢查是否是一個有效的URL,如果提供了protocol,host等,則該URL還需滿足提供的條件
@Valid//該註解只要用於欄位為一個包含其他物件的集合或map或陣列的欄位,或該欄位直接為一個其他物件的引用,
//這樣在檢查當前物件的同時也會檢查該欄位所引用的物件