# 表单校验说明
hibernate Validator 是 Bean Validation 的参考实现 。 Hibernate Validator 提供了 JSR 303 规范中所有内置 constraint 的实现,除此之外还有一些附加的 constraint。
# Bean Validation 中内置的 constraint
| 注解 | 作用 |
|---|---|
| @Valid | 被注释的元素是一个对象,需要检查此对象的所有字段值 |
| @Null | 被注释的元素必须为 null |
| @NotNull | 被注释的元素必须不为 null |
| @AssertTrue | 被注释的元素必须为 true |
| @AssertFalse | 被注释的元素必须为 false |
| @Min(value) | 被注释的元素必须是一个数字,其值必须大于等于指定的最小值 |
| @Max(value) | 被注释的元素必须是一个数字,其值必须小于等于指定的最大值 |
| @DecimalMin(value) | 被注释的元素必须是一个数字,其值必须大于等于指定的最小值 |
| @DecimalMax(value) | 被注释的元素必须是一个数字,其值必须小于等于指定的最大值 |
| @Size(max, min) | 被注释的元素的大小必须在指定的范围内 |
| @Digits (integer, fraction) | 被注释的元素必须是一个数字,其值必须在可接受的范围内 |
| @Past | 被注释的元素必须是一个过去的日期 |
| @Future | 被注释的元素必须是一个将来的日期 |
| @Pattern(value) | 被注释的元素必须符合指定的正则表达式 |
# Hibernate Validator 附加的 constraint
| 注解 | 作用 |
|---|---|
| 被注释的元素必须是电子邮箱地址 | |
| @Length(min=, max=) | 被注释的字符串的大小必须在指定的范围内 |
| @NotEmpty | 被注释的字符串的必须非空 |
| @Range(min=, max=) | 被注释的元素必须在合适的范围内 |
| @NotBlank | 被注释的字符串的必须非空 |
| @URL(protocol=,host=, port=,regexp=, flags=) | 被注释的字符串必须是一个有效的 url |
| @CreditCardNumber | 被注释的字符串必须通过 Luhn 校验算法, 银行卡,信用卡等号码一般都用 Luhn 计算合法性 |
| @ScriptAssert(lang=, script=, alias=) | 要有 Java Scripting API 即 JSR 223 ("Scripting for the JavaTM Platform")的实现 |
| @SafeHtml(whitelistType=,additionalTags=) | classpath 中要有 jsoup 包 |
# 自定义注解
| 注解 | 作用 |
|---|---|
| @Phone | 中国手机号格式校验 |
# 注意说明
主要区分下@NotNull @NotEmpty @NotBlank 3 个注解的区别:
| 注解 | 作用 |
|---|---|
| @NotNull | 任何对象的 value 不能为 null |
| @NotEmpty | 集合对象的元素不为 0,即集合不为空,也可以用于字符串不为 null |
| @NotBlank | 只能用于字符串不为 null,并且字符串 trim()以后 length 要大于 0 |
# 使用示例
Java 注解对接
public class RegisterBean {
@Email(message = "注册用户名只能为邮箱.")
@NotBlank(message = "邮箱不能为空.")
@Length(max = 32 , message = "邮箱最大长度不能超过32位")
private String loginName ; // 邮箱
@NotBlank(message = "密码不能为空.")
@Length(min=3 ,max = 32 , message = "密码最大长度不能超过32位,最小不能小于4位")
private String password ; // 密码
@NotBlank(message = "验证码不能为空.")
@Length(min=6 , max=6 ,message = "验证码长度为6位")
private String phoneCode ; // 手机验证码
// 此处省略get/set
}
在控制层使用,在类上添加@Validated即实现注解
public ResponseBean registerSave(@Validated RegisterBean registerBean) {}