转载

Spring 参数校验详解

JCP 全称 Java社区进程 (Java Community Process,JCP)

JCP 是一个开放性的国际技术标准组织,职责是发展和更新 Java 技术规范。由24个成员组成的执行委员会则是该组织的最高决策机构,负责规划 Java 的技术演进方向。

JSR

JSR 全称 Java 规范提案 (Java Specification Requests,JSR)

是指向 JCP 提出新增一个标准化技术规范的正式请求。任何人都可以提交JSR,以向Java平台增添新的API和服务。

JSR已成为Java界的一个重要标准。

Bean Validation

Bean Validation 顾名思义是对 java Bean 的校验,目前为止,Java 对 Bean 的校验有3个规范。

JSR-303 : Bean Validation

JSR-303规范官网 JSR-303 : Bean Validation ,是一项 java 规范提案,并且于2009年11月16日通过提案,正式成为一项 java 规范。

JSR 349 : Bean Validation 1.1

JSR-349规范官网

JSR 349 : Bean Validation 1.1,故名思议,是 Bean Validation 的 1.1 版本,于2013年5月24日通过提案,正式成为一项 java 规范。

JSR 380 : Bean Validation 2.0

JSR-380规范官网

JSR 380 : Bean Validation 2.0,故名思议,是 Bean Validation 的 2.0 版本,于2017年8月21日通过提案,正式成为一项 java 规范。

javax.validation

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 也提供了对于版本的实现,如图

Spring 参数校验详解

其中

  • 1.0.x 对应 JSR-303 : Bean Validation
  • 1.1.x 对应 JSR 349 : Bean Validation 1.1
  • 2.0.x 对应 JSR 380 : Bean Validation 2.0

Hibernate-Validator

Hibernate-Validator 是 Hibernate 提供的对 JSR-303 : Bean Validation 规范的实现,它基于 javax.validation ,并在它的基础上提供了 @Range 、@Length 等注解。

Spring 参数校验

参数校验作为web开发最基础的需求,Spring 自然是对其进行了支持。Spring mvc 中就自带 Hibernate-Validator 框架,用于对 Java bean 类型的参数进行校验。

光有 Hibernate-Validator 还不管,因为参数如果不是 Java bean 就没办法校验,因此 spring 增加了对普通参数类型的支持。

因此在使用 spring 框架进行参数校验时,会使用到多方技术。这就是为什么用于参数校验的注解,有的是来自 javax 、有的是来自 Hibernate、有的又来自 spring的原因。

对 Java bean 类型进行参数校验

参考 使用 Hibernate-Validator 对 Java bean 类型进行参数校验

对普通类型进行参数校验

对普通类型进行参数校验是 spring 框架对 Hibernate-Validator 只能校验 Java bean 的补充。一般用于参数不多的情况(没必要为了一两个参数,单独封装一个 java bean)。

这种情况下,我们可以直接把校验注解打在对应参数上,然后在 controller 上添加 @Validated 注解,这个注解就是 spring 对普通类型参数校验的支持注解。

例子如下

Spring 参数校验详解
原文  https://juejin.im/post/5dd8d44c518825734e4cda22
正文到此结束
Loading...