JSR 303 是什么?
JSR-303 是 Java EE 6 中的一项子规范,叫做 Bean Validation,官方参考实现是hibernate Validator。
JSR 303 能做什么?
1.JSR 303 用于对java Bean 中的字段的值进行验证,使得基本的验证逻辑可以从业务代码中脱离出来。
2.是一个运行时的数据验证框架,在验证之后验证的错误信息会被马上返回。
都有些什么验证?
hibernate Validator对JSR303做了比较全面的实现,并且还额外提供了一些实现,如下:
Constraint | 详细信息 | 作用类型 |
---|---|---|
@Null | 被注释的元素必须为 null | 引用类型 |
@NotNull | 被注释的元素必须不为 null | 引用类型 |
@AssertTrue | 被注释的元素必须为 true | boolean |
@AssertFalse | 被注释的元素必须为 false | boolean |
@Min(value) | 被注释的元素必须是一个数字,其值必须大于等于指定的最小值 | byte、short、int、long及对应的包装类型以及BigDecimal、BigInteger |
@Max(value) | 被注释的元素必须是一个数字,其值必须小于等于指定的最大值 | byte、short、int、long及对应的包装类型以及BigDecimal、BigInteger |
@DecimalMin(value) | 被注释的元素必须是一个数字,其值必须大于等于指定的最小值 | byte、short、int、long及对应的包装类型以及BigDecimal、BigInteger、String |
@DecimalMax(value) | 被注释的元素必须是一个数字,其值必须小于等于指定的最大值 | byte、short、int、long及对应的包装类型以及BigDecimal、BigInteger、String |
@Size(max, min) | 被注释的元素的大小必须在指定的范围内 | String、Collection、Map和数组 |
@Digits (integer, fraction) | 被注释的元素必须是一个数字,其值必须在可接受的范围内 | byte、short、int、long及各自的包装类型以及BigDecimal、BigInteger、String |
@Past | 被注释的元素必须是一个过去的日期 | java.util.Date,java.util.Calendar |
@Future | 被注释的元素必须是一个将来的日期 | java.util.Date,java.util.Calendar |
@Pattern(regex=) | 被注释的元素必须符合指定的正则表达式 | String |
@Valid | 被注释的元素需要递归验证 | 引用对象 |
以下是hibernate Validator新增的 | ||
被注释的元素必须是电子邮箱地址 | String | |
@Length(min=下限, max=上限) | 被注释的字符串的大小必须在指定的范围内 | String |
@NotEmpty | 被注释的元素的必须非空并且size大于0 | String、Collection、Map和数组 |
@NotBlank | 被注释的元素必须不为空且不能全部为’ '(空字符串) | String |
@Range(min=最小值, max=最大值) | 被注释的元素必须在合适的范围内 | byte、short、int、long及各自的包装类型以及BigDecimal、BigInteger、String |
注意:@Valid 和 BindingResult 是一一对应的,如果有多个@Valid,那么每个@Valid后面跟着的BindingResult就是这个@Valid的验证结果,顺序不能乱
需要的依赖
<!--jsr 303-->
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>2.1.0.Final</version>
</dependency>
<!-- hibernate validator-->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>5.4.0.Final</version>
</dependency>
注意:springboot中已经自动集成了hibernate-validation 的依赖。
总结
jsr303让代码变得更简洁、更清晰,使开发人员在定义数据模型时不必考虑实现框架的限制。当然 Bean Validation 不止提供了一些最基本的 constraint,还可以自定义验证规则,在实际的开发过程中,用户可以根据自己的需要组合或开发出更加合适的 constraint