前言
使用 Java 编写接口时,我们经常需要验证参数的合法性,但是在标准出现之前,我们有各种各样的方法用来验证,比如编写断言工具类等。后来 Java 发展出了一套非常方便的验证框架,最开始作为 JSR 303 规范,后来进行了拓展,叫做 JSR 380,其说明可在 https://jcp.org/en/jsr/detail?id=380 查看。虽然叫做提案,但是已经非常完善了。
下载安装
要使用 Java Bean Validation API,需要选择一个具体的实现模块,目前用的最多的是 Hibernate 提供的实现,需要在类路径中包含如下 jar:
- jakarta.validation-api.jar
- hibernate-validator.jar
- jakarta.el-api.jar(只在没有 Web 环境的情况下需要)
如果使用 Manven,可以使用如下配置代码:
<dependency>
<groupId>jakarta.validation</groupId>
<artifactId>jakarta.validation-api</artifactId>
<version>3.0.0</version>
</dependency>
<dependency>
<groupId>org.hibernate.validator</groupId>
<artifactId>hibernate-validator</artifactId>
<version>7.0.1.Final</version>
</dependency>
<dependency>
<groupId>org.glassfish</groupId>
<artifactId>jakarta.el</artifactId>
<version>4.0.2</version>
</dependency>
功能
验证 Java Bean
既然叫做 Bean Validation,最主要的功能当然是校验 Java Bean 了,事实上第一版的规范确实只有校验 Java Bean 的功能,下面的功能都是后来加的。
先来看看我这个 Java Bean:
package org.example;
import java.time.LocalDate;
public class User {
private String name;
private int age;
private LocalDate birthDay;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public LocalDate getBirthDay() {
return birthDay;
}
public void setBirthDay(LocalDate birthDay) {
this.birthDay = birthDay;
}
}
就是一个普普通通的类,现在假设一个场景,要求这个对象的所有属性不能为空,名字必须在 2 到 4 个字之间,年龄必须在 18 到 35 之间,生日必须是过去的日期并且生日年份加上年龄必须是今年年份(不考虑现实逻辑)。
这个很好实现,不用框架也能实现,但是用判断语句写非常麻烦,而且写完之后如果不看代