目录:
一:添加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 被注释的元素必须在合适的范围内