前言
简述JSR303/JSR-349,hibernate validation,spring validation之间的关系。
- JSR303是一项标准,JSR-349是其的升级版本,添加了一些新特性,他们规定一些校验规范即校验注解,如@Null,@NotNull,@Pattern,他们位于javax.validation.constraints包下,只提供规范不提供实现。
- 而hibernate validation是对这个规范的实践(不要将hibernate和数据库orm框架联系在一起),他提供了相应的实现,并增加了一些其他校验注解,如@Email,@Length,@Range等等,他们位于org.hibernate.validator.constraints包下。
- 而万能的spring为了给开发者提供便捷,对hibernate validation进行了二次封装,显示校验validated bean时,你可以使用spring validation或者hibernate validation,而spring validation另一个特性,便是其在springmvc模块中添加了自动校验,并将校验信息封装进了特定的类中。
常见注解
JSR提供的校验注解:
@Null 被注释的元素必须为 null
@NotNull 被注释的元素必须不为 null
@AssertTrue 被注释的元素必须为 true
@AssertFalse 被注释的元素必须为 false
@Size(max=, min=) 被注释的元素的大小必须在指定的范围内,验证对象(Array,Collection,Map,String)
@Min(value) 被注释的元素必须是一个数字,其值必须大于等于指定的最小值,验证 Number 和 String 对象
@Max(value) 被注释的元素必须是一个数字,其值必须小于等于指定的最大值,验证 Number 和 String 对象
@DecimalMin(value) 被注释的元素必须是一个数字,其值必须大于等于指定的最小值
@DecimalMax(value) 被注释的元素必须是一个数字,其值必须小于等于指定的最大值
@Digits (integer, fraction) 被注释的元素必须是一个数字,其值必须在可接受的范围内
@Past 被注释的元素必须是一个过去的日期
@Future 被注释的元素必须是一个将来的日期
@Pattern(regex=,flag=) 被注释的元素必须符合指定的正则表达式
Hibernate Validator提供的校验注解:
@NotBlank(message =) 验证字符串非null,且长度必须大于0
@Email 被注释的元素必须是电子邮箱地址
@Length(min=,max=) 被注释的字符串的大小必须在指定的范围内
@NotEmpty 被注释的字符串的必须非空
@Range(min=,max=,message=) 被注释的元素必须在合适的范围内
具体场景
String类型
@NotBlank
用于String类型变量上,表示不能为null,去trim后length>0
@NotBlank(message = "证书类型不能为空")
private String certType;
@Contain
用于String类型变量上,表示值必须是指定的值
@Contain(value = "RSA,SM2", message = "证书类型范围[RSA,SM2]")
private String certType;
@ByteSize
控制字节长度的范围
@NotBlank(message = "证书主题不能为空")
@ByteSize(max = 255, message = "证书主题长度不能超过255字节")
private String certDn;
Integer类型
@NotNull(message = "证书有效期不能为空")
@Min(value = 1, message = "证书有效期范围[1~3650]")
@Max(value = 3650, message = "证书有效期范围[1~3650]")
private Integer validityLen;