Spring @Valid 注解 校验实体属性
1 @Valid 介绍
1.1 前言
在我们日常开发中,数据校验的实现是一件比较痛苦的事情,繁琐且无趣,对于一般的业务而言,极少出现一些过于复杂的校验,常常都是非空,长度,最大最小值,正则,数据关联,定值等等。我在开发过程中为了减少我写这些代码的coding成本,由此认识了javax.validation包下的 @Valid 注解 和 Java 的 Bean Validation 规范。
1.2 Bean Validation
首先了解下JSR(Java Specification Requests)
JSR:Java Specification Requests的缩写,意思是Java 规范提案。是指向JCP(Java Community Process)提出新增一个标准化技术规范的正式请求。任何人都可以提交JSR,以向Java平台增添新的API和服务。JSR已成为Java界的一个重要标准。
Bean Validation 是一个运行时的数据验证框架,在验证之后验证的错误信息会被马上返回。
Java 在2009年的 JAVAEE 6 中发布了 JSR303以及javax下的validation包内容。
这项工作的主要目标是为java应用程序开发人员提供 基于java对象的 约束(constraints)声明 和 对约束的验证工具(validator),以及约束元数据存储库和查询API。
但是该内容并没有具体的实现, Hibernate-Validator框架 提供了 JSR 303 规范中所有内置 constraint 的实现,除此之外还有一些附加的 constraint。
注意:此处的Hibernate 不是 Hibernate ORM
后续关于Bean Validation 的规范提案 和 各个版本的实现 陆续得以迭代,各个版本的信息如下:
Bean Validation Version
release year
JSR Version
Hibernate impl version
apache BVal impl version
Bean Validation 1.0
2009年
JSR 303
Hibernate-Validator-4.3.1.Final
org.apache.bval 0.5
Bean Validation 1.1
2013年
JSR 349
Hibernate-Validator-5.1.1.Final
org.apache.bval 1.1.2
Bean Validation 2.0
2017年
JSR 380
Hibernate-Validator-6.0.1.Final
org.apache.bval 2.0.3(最新版本)
本文主要基于 Hibernate-Validator 框架的实现为主。
1.3 关于validation包
Java-Api文档
其中 javax.validation.constraints包下是 bean validation 支持的约束,以注解的形式使用。
1.3 关于Spring Hibernate Validator支持的约束集信息(constraints)
截取自 IBM JSR 303
表 1. Bean Validation 中内置的 constraint
表 2. Hibernate Validator 附加的 constraint
2 简单的使用
2.1配置项
2.1.1 maven – jar包引入
如果使用springMVC ,需要在 pom文件中引入对应的jar包。
<!-- hibernate.validator jar包-->
<depend