springMVC學習(五)校驗器Validation
校驗器Validation
-
@AssertFalse,驗證 Boolean 物件是否為 false(@AssertTrue)
-
@DecimalMax,被標註的值必須不大於約束中指定的最大值. 這個約束的引數是一個通過BigDecimal定義的最大值的字串表示.小數存在精度(@DecimalMin)
-
@Digits(integer=,fraction=),驗證字串是否是符合指定格式的數字,interger指定整數精度,fraction指定小數精度
-
@Future,驗證 Date 和 Calendar 物件是否在當前時間之後 (@Past)
-
@Max,驗證 Number 和 String 物件是否小等於指定的值(@Min)
-
@NotNull,驗證物件是否不為null, 無法查檢長度為0的字串(@Null)
-
@Pattern,驗證 String 物件是否符合正則表示式的規則
-
@Size,驗證物件(Array,Collection,Map,String)長度是否在給定的範圍之內
開發步驟:
-
匯入jar包
-
hibernate-validator-6.0.16.Final.jar
-
validation-api-2.1.0.Final.jar
-
jboss-logging-3.4.0.Final
-
-
ValidationMessages.properties配置檔案,配置提示資訊
items.name.length.error=商品名稱的長度為1到30個字元
items.createTime.is.notNull=商品生產日期不能為空
-
springMVC配置檔案新增配置
<!--校驗器配置-->
<!-- 錯誤資訊的校驗檔案配置 -->
<bean id="messageSource"
class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
<!-- 資原始檔名 -->
<property name="basenames">
<list>
<value>classpath:ValidationMessages</value>
</list>
</property>
<!-- 資原始檔編碼格式 -->
<property name="fileEncodings" value="utf-8" />
<!-- 對資原始檔內容快取時間,單位秒 -->
<property name="cacheSeconds" value="120" />
</bean>
<!-- 配置校驗器 -->
<bean id="validator"
class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean">
<!-- 校驗器 -->
<property name="providerClass" value="org.hibernate.validator.HibernateValidator" />
<!-- 指定校驗使用的資原始檔,如果不指定則預設使用classpath下的ValidationMessages.properties -->
<property name="validationMessageSource" ref="messageSource" />
</bean>
<!-- 新增到自定義引數繫結的WebBindingInitializer中 -->
<bean id="customBinder"
class="org.springframework.web.bind.support.ConfigurableWebBindingInitializer">
<!-- 配置validator -->
<property name="validator" ref="validator" />
</bean>
<!-- WebBindingInitializer新增到介面卡中 -->
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
<!-- 在webBindingInitializer中注入自定義屬性編輯器、自定義轉換器 -->
<property name="webBindingInitializer" ref="customBinder"/>
</bean>
-
在POJO中定義規則
public class Items {
private Integer id;
-
驗證時,在controller裡面用@Validated表示該實體(引數)需要驗證,然後用BindingResult物件接受驗證結果,當驗證不通過時BindingResult就會接受對應的錯誤提示資訊
分組校驗
分組校驗其實就是為了我們的校驗更加靈活,針對不同的 Controller方法達到個性化驗證;比如:修改商品資訊,只校驗日期不為空。那麼此時,我們就可以用到分組校驗了,開發步驟:
-
定義分組的介面(介面不定義方法,只作為一個標識)
public interface ValidateGroup1 {
}
-
定於校驗規則屬於哪一各組( @Size、@NotNull 中新增 groups屬性)
-
在Controller方法中定義使用校驗分組(@Validated 註解屬性value 指明哪個分組,
@Validated(value={ValidateGroup1.class})
)