若要使用JSR-303資料校驗規範,可以使用Hibernate-validator校驗架構,Hibernate-validator實作了JSR-303驗證架構支援注解風格的驗證。
連結:http://hibernate.org/validator/
解壓後把hibernate-validator-x.xx.xx.Final.jar、jboss-logging-x.x.x.jar、validation-api-x.x.x.GA.jar、classmate-x.x.x.jar這四個包添加到項目中。
以使用者注冊為例子
Entity: User.java
public class User {
@Size(min=6, max=15, message="Username must be 6-15 chars long")
@Pattern(regexp="^[a-zA-Z0-9]+$", message="username must no spaces")
private String username;
@Size(min=6, max=15, message="password must be 6-15 chars long")
@Pattern(regexp="^[a-zA-Z0-9]+$", message="password must no spaces")
private String password;
@Size(min=6, max=15, message="name must be 6-15 chars long")
private String name;
@Pattern(regexp="[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4}", message="Invalid email address")
private String email;
<span style="white-space:pre"> </span>//Get Set 方法此處已省略
}
Controller:
//@Valid 根據 JSR-303标準對JavaBead中标注的屬性進行校驗
@RequestMapping(method=RequestMethod.POST)
public String acceptForm(@Valid User user, BindingResult bindingResult){
if(bindingResult.hasErrors()){
return "user/register";
}
System.out.println("save user success");
return "redirect:/hello/" + user.getUsername();
}
在表單中可以使用Spring form tags
<%@ taglib prefix="sf" uri="http://www.springframework.org/tags/form" %>
JSP:
<sf:form method="POST" modelAttribute="user">
<fieldset>
<table cellspacing="0">
<tr>
<th><label>Name:</label></th>
<td><sf:input path="name" size="15"/>
<sf:errors path="name" cssClass="error" />
</td>
</tr>
<tr>
<th><label>Username:</label></th>
<td><sf:input path="username" size="15" maxlength="10"/>
<sf:errors path="username" cssClass="error" />
</td>
</tr>
<tr>
<th><label>Password:</label></th>
<td><sf:password path="password" size="15"/>
<sf:errors path="password" cssClass="error" />
</td>
</tr>
<tr>
<th><label>Email:</label></th>
<td><sf:input path="email" size="15"/>
<sf:errors path="email" cssClass="error" />
</td>
</tr>
<tr>
<th></th>
<td><input type="submit" value="create" /></td>
</tr>
</table>
</fieldset>
</sf:form>
在JSP中的<sf:errors /> 會自動解析出相應的錯誤資訊來,如圖
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsICMzcDOyITN0EzMwUDM2EDMy8CX0Vmbu4GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.jpg)
JSR-303其他校驗規範
空檢查
@Null 驗證對象是否為null
@NotNull 驗證對象是否不為null, 無法查檢長度為0的字元串
@NotBlank 檢查限制字元串是不是Null還有被Trim的長度是否大于0,隻對字元串,且會去掉前後空格.
@NotEmpty 檢查限制元素是否為NULL或者是EMPTY.
Booelan檢查
@AssertTrue 驗證 Boolean 對象是否為 true
@AssertFalse 驗證 Boolean 對象是否為 false
長度檢查
@Size(min=, max=) 驗證對象(Array,Collection,Map,String)長度是否在給定的範圍之内
@Length(min=, max=) Validates that the annotated string is between min and max included.
日期檢查
@Past 驗證 Date 和 Calendar 對象是否在目前時間之前
@Future 驗證 Date 和 Calendar 對象是否在目前時間之後
@Pattern 驗證 String 對象是否符合正規表達式的規則
數值檢查,建議使用在Stirng,Integer類型,不建議使用在int類型上,因為表單值為“”時無法轉換為int,但可以轉換為Stirng為"",Integer為null
@Min 驗證 Number 和 String 對象是否大等于指定的值
@Max 驗證 Number 和 String 對象是否小等于指定的值
@DecimalMax 被标注的值必須不大于限制中指定的最大值. 這個限制的參數是一個通過BigDecimal定義的最大值的字元串表示.小數存在精度
@DecimalMin 被标注的值必須不小于限制中指定的最小值. 這個限制的參數是一個通過BigDecimal定義的最小值的字元串表示.小數存在精度
@Digits 驗證 Number 和 String 的構成是否合法
@Digits(integer=,fraction=) 驗證字元串是否是符合指定格式的數字,interger指定整數精度,fraction指定小數精度。
@Range(min=, max=) Checks whether the annotated value lies between (inclusive) the specified minimum and maximum.
@Range(min=10000,max=50000,message="range.bean.wage")
private BigDecimal wage;
@Valid 遞歸的對關聯對象進行校驗, 如果關聯對象是個集合或者數組,那麼對其中的元素進行遞歸校驗,如果是一個map,則對其中的值部分進行校驗.(是否進行遞歸驗證)
@CreditCardNumber信用卡驗證
@Email 驗證是否是郵件位址,如果為null,不進行驗證,算通過驗證。
@ScriptAssert(lang= ,script=, alias=)
@URL(protocol=,host=, port=,regexp=, flags=)