# 表单校验说明

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

注解 作用
@Email 被注释的元素必须是电子邮箱地址
@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) {}