目錄:
一:添加jar包二:添加注解三:方法中添加@valied注解四:頁面上顯示錯誤消息五:國際化檔案中錯誤消息的定制六:國際化資源檔案的配置消息的配置七:JSR303支援的注解及Hibernate validate的擴充注解
一:首先需要加入兩個jar包的依賴,我的項目是使用Maven建構,如果讀者沒有使用Maven建構項目自行下載下傳jar包
<!--加入hibernate JSR 303 驗證 -->
<dependency>
<groupId>org.hibernate.validator</groupId>
<artifactId>hibernate-validator</artifactId>
<version>${hibernate.version}</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator-annotation-processor</artifactId>
<version>${hibernate.version}</version>
</dependency>
二:在Bean的屬性上加入驗證的注解,紅色的為驗證注解(由于CSDN編輯器的問題,标注顔色的地方顯示了HTML代碼,讀者自行判斷),可以在注解的message屬性中定制提示資訊
package com.crud.bean;
import java.util.Date;
import javax.validation.constraints.Email;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Past;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.format.annotation.NumberFormat;
public class Employee {
private Integer id;
@NotBlank(message="使用者名為空啦!")
private String lastName;
@Email(message="郵箱位址不合法")
@NotBlank
private String email;
@Past
@NotNull
@DateTimeFormat(pattern = "yyyy-MM-dd")
private Date birth;
@NumberFormat(pattern = "#,###.#")
private Float salary;
private int gerder;
private Department department;
//此處省略get、set方法
}
三:在Controller的方法的Bean前面加入@Valid注解,注意!如果要擷取錯誤消息,注入的傳回對象必須與Bean相鄰,
注入的結果可是使用BindResult或者Errors,二者都可以擷取錯誤結果,二者的方法也相同,可以檢視BindingResult的源碼,BindingResult實作了Errors接口,如圖

@RequestMapping(value="/emp", method=RequestMethod.POST)
// 這裡的驗證bean與注入結果必須相鄰,
// 注入的結果可是使用BindResult或者Errors,二者都可以擷取錯誤結果,二者的方法也相同
// public String save(@Valid Employee employee, Errors bindingResult) {
public String save(@Valid Employee employee, BindingResult bindingResult, Map<String, Object> map) {
if (bindingResult.getErrorCount() > 0) {
List<FieldError> errorFields = bindingResult.getFieldErrors();
errorFields.forEach(
(errorField) -> System.out.println(errorField.getField() + "->" + errorField.getDefaultMessage()));
System.out.println(employee);
map.put("departments", departmentDao.getAllDepartment());
return "input";
}
employeeDao.save(employee);
return "redirect:/employee/emps";
}
四:如果想要在頁面上顯示錯誤消息,可以使用springmvc的errors标簽,其中path相同即可
使用 <form:input path="*" /> 會一次顯示所有的錯誤資訊
<td><form:input path="lastName"/></td>
<td><form:errors path="lastName"/></td>
效果如圖:
五:以下是實作錯誤消息的定制(也可以在注解的message屬性中加提示資訊,如二中所示):
資源檔案的中的key為 注解名稱.存儲在與對象中的bean的名稱.屬性名
NotBlank.employee.lastName=\u7528\u6237\u540D\u4E0D\u80FD\u4E3A\u7A7A.
Email.employee.email=\u4E0D\u5408\u6CD5\u7684\u90AE\u7BB1\u5730\u5740.
NotBlank.employee.email=\u90AE\u7BB1\u5730\u5740\u4E0D\u80FD\u4E3A\u7A7A.
Past.employee.birth=\u65F6\u95F4\u5FC5\u987B\u662F\u4E00\u4E2A\u8FC7\u53BB\u7684\u65F6\u95F4.
NotNull.employee.birth=\u751F\u65E5\u4E0D\u80FD\u4E3A\u7A7A.
如果使用了類型轉換注解,如上面Employee中的DateTimeFormat注解,國際化資源檔案key以typeMismatch開頭
typeMismatch.employee.birth=\u751F\u65E5\u7C7B\u578B\u4E0D\u5339\u914D.
typeMismatch.employee.solary=\u5DE5\u8D44\u683C\u5F0F\u9519\u8BEF.
六:springmvc配置檔案中的配置
<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
<property name="basename" value="i18n"></property>
</bean>
七:JSR303 支援的校驗注解
- 以下是Hibernate validate 進的擴充驗證注解
@NotNull 注解元素必須是非空 @Null 注解元素必須是空 @Digits 驗證數字構成是否合法 @Future 驗證是否在目前系統時間之後 @Past 驗證是否在目前系統時間之前 @Max 驗證值是否小于等于最大指定整數值 @Min 驗證值是否大于等于最小指定整數值 @Pattern 驗證字元串是否比對指定的正規表達式 @Pattern 驗證字元串是否比對指定的正規表達式 @Size 驗證元素大小是否在指定範圍内 @DecimalMax 驗證值是否小于等于最大指定小數值 @DecimalMin 驗證值是否大于等于最小指定小數值 @AssertTrue 被注釋的元素必須為true @AssertFalse 被注釋的元素必須為false -
@Email 被注釋的元素必須是電子郵箱位址 @Length 被注釋的字元串的大小必須在指定的範圍内 @NotEmpty 被注釋的字元串的必須非空 @Range 被注釋的元素必須在合适的範圍内