SpringMVC—JSR303—validate
(2014-04-17 12:50:47)分類: SpringMVC |
定義:JSR-303 是JAVA EE 6 中的一項子規范,叫做Bean Validation,現在一共有兩個規范:BeanValidation1.0(即JSR303)和BeanValidation1.1(即JSR349),主要用於對數據進行校驗,確保輸入進來的數據從語 義上來講是正確的。
特點:1.JSR 303 用於對Java Bean 中的字段的值進行驗證,使得驗證邏輯從業務代碼中脫離出來。
2.是一個運行時的數據驗證框架,在驗證之后驗證的錯誤信息會被馬上返回。
應用場景:一般用於表單提交頁面(如用戶名必填、只能由數字字母組成等等)
使用:
-----------------------------------------------------------------------------------------------------------------
1.@NotNull/@Null
驗證字段: 引用數據類型
注解說明:注解元素必須是非空或空
2.@Digits
驗證字段:byte、short、int、long及各自的包裝類型以及BigDecimal、BigInteger、String
注解說明:驗證數字構成是否合法
屬性說明:integer:指定整數部分數字位數,fraction:指定小數部分數字位數
3.@Future/Past
驗證字段:java.util.Date,java.util.Calendar
注解說明:驗證是否在當前系統時間之后/之前
4.@Max/@Min
驗證字段:byte、short、int、long及對應的包裝類型以及BigDecimal、BigInteger
注解說明:驗證值是否小於等於最大指定整數值或大於等於最小指定整數值
5.@Pattern
驗證字段:String
注解說明:驗證字符串是否匹配指定的正則表達式
屬性說明:regexp:匹配的正則表達式,flags:指定Pattern.Flag的數值,表示正則表達式的選項
6.@Size
驗證字段:String、Collection、Map和數組
注解說明:驗證元素大小是否在指定范圍內
屬性說明:max:最大長度,min:最小長度,message:提示信息,默認:{constraint.size}
7.@DecimalMax/@DecimalMin
驗證字段:byte、short、int、long及對應的包裝類型以及BigDecimal、BigInteger、String
屬性說明:驗證值是否小於等於最大指定小數值或大於等於最小指定小數值
8.@Valid
屬性說明:驗證值是否需要遞歸調用
---------------------------------------------------------------------------------------------------
Hibernate Validator 附加的 constraint
9.@Email
被注釋的元素必須是電子郵箱地址
10.@Length
被注釋的字符串的大小必須在指定的范圍內
11.@NotEmpty
被注釋的字符串的必須非空
12.@Range
被注釋的元素必須在合適的范圍內
-----------------------------------------------------------------------------------------------------------------
hibernate validate:
相關jar包:1.下載jar包4.0.2版本的jar文件
2.解壓下載的壓縮包hibernate-validator和validation-api jar包
注意:這里面既包含了javax下的約束也包含了org.hibernate 下的約束,在之前的版本中,javax下的約束hibernate是不認的。
一、約束種類:
A:字段級的約束:
class Person(){
@NotNull
private Integer id
}
當約束被定義在字段上的時候, 這個字段的值是通過字段訪問策略來獲取並驗證的. 也就是說Bean Validation的實現者會直接訪問這個實例變量而不會調用屬性的訪問器(getter) 即使這個方法存在。靜態字段或者屬性是不會被校驗的
B:屬性級的約束
class Person(){
@NotNull
private String getUsername(){
}
}
必須遵守JavaBeans規范,且定義在getter上,不能定義在setter上
C:類級的約束
D:約束的繼承
public class Cart extends Animal{
@NotNull
private String name
}
不僅會驗證Cart中的約束,同時會驗證Animal中的約束
E:對象圖
@Valid
private Person person; 一個類中有一個對象屬性
二、約束的校驗
接口:Validator
校驗的主要接口
怎么獲取實例對象?
ValidatorFactory factory = Validation.buildDefaultValidatorFac
tory();
Validator validator =
factory.getValidator();
調用實例對象中的方法返回Set對象,用來校驗整個實體對象或者對象的屬性
validate():對一個給定的實體對象中定義的所有約束進行校驗
Cart cart = new Cart(null, false, 5);
Set> constraintViolations = validator.validate(cart);
validateProperty():通過validateProperty()可以對一個給定實體對象的單個屬性進行校驗,需要符合JavaBean命名規范.Cart cart = new Cart(null, false, 5);
特點:1.JSR 303 用於對Java Bean 中的字段的值進行驗證,使得驗證邏輯從業務代碼中脫離出來。
應用場景:一般用於表單提交頁面(如用戶名必填、只能由數字字母組成等等)
使用:
-----------------------------------------------------------------------------------------------------------------
1.@NotNull/@Null
2.@Digits
3.@Future/Past
4.@Max/@Min
5.@Pattern
6.@Size
7.@DecimalMax/@DecimalMin
8.@Valid
---------------------------------------------------------------------------------------------------
Hibernate Validator 附加的 constraint
9.@Email
10.@Length
11.@NotEmpty
12.@Range
-----------------------------------------------------------------------------------------------------------------
hibernate validate:
相關jar包:1.下載jar包4.0.2版本的jar文件
一、約束種類:
A:字段級的約束:
class Person(){
}
當約束被定義在字段上的時候, 這個字段的值是通過字段訪問策略來獲取並驗證的. 也就是說Bean Validation的實現者會直接訪問這個實例變量而不會調用屬性的訪問器(getter) 即使這個方法存在。靜態字段或者屬性是不會被校驗的
B:屬性級的約束
class Person(){
}
必須遵守JavaBeans規范,且定義在getter上,不能定義在setter上
C:類級的約束
D:約束的繼承
E:對象圖
二、約束的校驗