一、准備校驗時使用的JAR
validation-api-1.0.0.GA.jar:JDK的接口;
hibernate-validator-4.2.0.Final.jar是對上述接口的實現;
二、編寫需要校驗的bean
1 @NotNull(message="名字不能為空") 2 private String userName; 3 @Max(value=120,message="年齡最大不能查過120") 4 private int age; 5 @Email(message="郵箱格式錯誤") 6 private String email;
三、校驗方法
1 @RequestMapping("/login") 2 public String testValid(@Valid User user, BindingResult result){ 3 if (result.hasErrors()){ 4 List<ObjectError> errorList = result.getAllErrors(); 5 for(ObjectError error : errorList){ 6 System.out.println(error.getDefaultMessage()); 7 } 8 } 9 10 return "test"; 11 }
備注:這里一個@Valid的參數后必須緊挨着一個BindingResult 參數,否則spring會在校驗不通過時直接拋出異常
前台可以使用spring的標簽庫也可以自己自定義處理
spring標簽庫的用法:
1 <%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%> 2 3 <html> 4 <head> 5 <title>Reservation Form</title> 6 <style> 7 .error { 8 color: #ff0000; 9 font-weight: bold; 10 } 11 </style> 12 </head> 13 14 <body> 15 <form:form method="post" modelAttribute="vm"> 16 <form:errors path="*" cssClass="error" /> 17 <table> 18 <tr> 19 <td>Name</td> 20 <td><form:input path="userName" /> 21 </td> 22 <td><form:errors path="userName" cssClass="error" /> 23 </td> 24 </tr> 25 <tr> 26 <td>email</td> 27 <td><form:input path="email" /> 28 </td> 29 <td><form:errors path="email" cssClass="error" /> 30 </td> 31 </tr> 32 33 <tr> 34 <td colspan="3"><input type="submit" /> 35 </td> 36 </tr> 37 </table> 38 </form:form> 39 </body> 40 </html>
四、開啟spring的Valid功能
1 <mvc:annotation-driven />
1 空檢查 2 @Null 驗證對象是否為null 3 @NotNull 驗證對象是否不為null, 無法查檢長度為0的字符串 4 @NotBlank 檢查約束字符串是不是Null還有被Trim的長度是否大於0,只對字符串,且會去掉前后空格. 5 @NotEmpty 檢查約束元素是否為NULL或者是EMPTY. 6 7 Booelan檢查 8 @AssertTrue 驗證 Boolean 對象是否為 true 9 @AssertFalse 驗證 Boolean 對象是否為 false 10 11 長度檢查 12 @Size(min=, max=) 驗證對象(Array,Collection,Map,String)長度是否在給定的范圍之內 13 @Length(min=, max=) Validates that the annotated string is between min and max included. 14 15 日期檢查 16 @Past 驗證 Date 和 Calendar 對象是否在當前時間之前 17 @Future 驗證 Date 和 Calendar 對象是否在當前時間之后 18 @Pattern 驗證 String 對象是否符合正則表達式的規則 19 20 數值檢查,建議使用在Stirng,Integer類型,不建議使用在int類型上,因為表單值為“”時無法轉換為int,但可以轉換為Stirng為"",Integer為null 21 @Min 驗證 Number 和 String 對象是否大等於指定的值 22 @Max 驗證 Number 和 String 對象是否小等於指定的值 23 @DecimalMax 被標注的值必須不大於約束中指定的最大值. 這個約束的參數是一個通過BigDecimal定義的最大值的字符串表示.小數存在精度 24 @DecimalMin 被標注的值必須不小於約束中指定的最小值. 這個約束的參數是一個通過BigDecimal定義的最小值的字符串表示.小數存在精度 25 @Digits 驗證 Number 和 String 的構成是否合法 26 @Digits(integer=,fraction=) 驗證字符串是否是符合指定格式的數字,interger指定整數精度,fraction指定小數精度。 27 28 @Range(min=, max=) Checks whether the annotated value lies between (inclusive) the specified minimum and maximum. 29 @Range(min=10000,max=50000,message="range.bean.wage") 30 private BigDecimal wage; 31 32 @Valid 遞歸的對關聯對象進行校驗, 如果關聯對象是個集合或者數組,那么對其中的元素進行遞歸校驗,如果是一個map,則對其中的值部分進行校驗.(是否進行遞歸驗證) 33 @CreditCardNumber信用卡驗證 34 @Email 驗證是否是郵件地址,如果為null,不進行驗證,算通過驗證。 35 @ScriptAssert(lang= ,script=, alias=) 36 @URL(protocol=,host=, port=,regexp=, flags=)