JCP 全称 Java社区进程 (Java Community Process,JCP) 。
JCP 是一个开放性的国际技术标准组织,职责是发展和更新 Java 技术规范。由24个成员组成的执行委员会则是该组织的最高决策机构,负责规划 Java 的技术演进方向。
JSR 全称 Java 规范提案 (Java Specification Requests,JSR) 。
是指向 JCP 提出新增一个标准化技术规范的正式请求。任何人都可以提交JSR,以向Java平台增添新的API和服务。
JSR已成为Java界的一个重要标准。
Bean Validation 顾名思义是对 java Bean 的校验,目前为止,Java 对 Bean 的校验有3个规范。
JSR-303规范官网 JSR-303 : Bean Validation ,是一项 java 规范提案,并且于2009年11月16日通过提案,正式成为一项 java 规范。
JSR-349规范官网
JSR 349 : Bean Validation 1.1,故名思议,是 Bean Validation 的 1.1 版本,于2013年5月24日通过提案,正式成为一项 java 规范。
JSR-380规范官网
JSR 380 : Bean Validation 2.0,故名思议,是 Bean Validation 的 2.0 版本,于2017年8月21日通过提案,正式成为一项 java 规范。
javax.validation 是 Java 官方提供的对 Bean Validation 规范的实现,它提供了 @NotBlank、@NotNull、@NotEmpty 等注解供我们使用。
maven 坐标如下
<dependency> <groupId>javax.validation</groupId> <artifactId>validation-api</artifactId> <version>2.0.1.Final</version> </dependency> 复制代码
由于 Bean Validation 有多个版本,因此 javax.validation 也提供了对于版本的实现,如图
其中
Hibernate-Validator 是 Hibernate 提供的对 JSR-303 : Bean Validation 规范的实现,它基于 javax.validation ,并在它的基础上提供了 @Range 、@Length 等注解。
参数校验作为web开发最基础的需求,Spring 自然是对其进行了支持。Spring mvc 中就自带 Hibernate-Validator 框架,用于对 Java bean 类型的参数进行校验。
光有 Hibernate-Validator 还不管,因为参数如果不是 Java bean 就没办法校验,因此 spring 增加了对普通参数类型的支持。
因此在使用 spring 框架进行参数校验时,会使用到多方技术。这就是为什么用于参数校验的注解,有的是来自 javax 、有的是来自 Hibernate、有的又来自 spring的原因。
参考 使用 Hibernate-Validator 对 Java bean 类型进行参数校验
对普通类型进行参数校验是 spring 框架对 Hibernate-Validator 只能校验 Java bean 的补充。一般用于参数不多的情况(没必要为了一两个参数,单独封装一个 java bean)。
这种情况下,我们可以直接把校验注解打在对应参数上,然后在 controller 上添加 @Validated 注解,这个注解就是 spring 对普通类型参数校验的支持注解。
例子如下