校验分类
单个对象
集合对象
分成校验与JavaBean验证模型
分层校验模型
JavaBean验证模型
JCP与JSR
JCP(Java Community Process)成立于1998年是使有兴趣的各方参与定义Java的特征和未来版本的正式过程。
JCP使用SR(Java规范请求,Java Specification Requests)作为正式规范文档,描述被提议加入到Java体系中的的规范和技术。
–维基百科
JSR303,Bean Validation 1.0
JSR349,Bean Validation 1.1
JSR380,Bean Validation 2.0
BV 与 HV 以及 SV
Bean Validation1.0参考实现:Hibernate Validator4.3.1.Final
Bean Validation1.l参考实现:Hibernate Validator5.1.1.Final
Bean Validation2.0参考实现:Hibernate Validator6.0.l.Final
Spring Validation在Hibernate Validator的基a础上,对其进行了二次封装,以满足在Spring环境中更简单、高效的对数据进行验证。
常用约束注解
◆空值校验类:@Nul,@NotNull,@NotEmpty,@NotBlank等
◆范围校验类:@Min,@Size,@Digits,@Future,@Negative等
◆其他校验类:@Email,@URL,@AssertTrue,@Pattern等
依赖
<!--Validation:相关依赖-->
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>2.0.1.Final</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>6.0.16.Final</version>
</dependency>
<!--非web环境需要单独导入-->
<dependency>
<groupId>javax.el</groupId>
<artifactId>javax.el-api</artifactId>
<version>3.0.0</version>
</dependency>
<dependency>
<groupId>org.glassfish.web</groupId>
<artifactId>javax.el</artifactId>
<version>2.2.6</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
实战一:初级案例
基本流程
import org.hibernate.validator.constraints.Length;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import javax.validation.ConstraintViolation;
import javax.validation.Validation;
import javax.validation.Validator;
import javax.validation.constraints.*;
import java.util.*;
public class ValidationTest {
private Validator validator;
private UserInfo userInfo;
private Set<ConstraintViolation<UserInfo>> set;
@Before
public void init() {
validator = Validation.buildDefaultValidatorFactory().getValidator();
userInfo = new UserInfo();
userInfo.setUserId("id1");
userInfo.setUserName(" ");
userInfo.setPassWord(" 12345");//空字符也算一位了
userInfo.setEmail("111@11");
userInfo.setAge(18);
Calendar calendar = Calendar.getInstance();
calendar.set(2020, 1, 1);
userInfo.setBirthday(calendar.getTime());
//不设置好友通过了,空集合不行
userInfo.setFriends(new ArrayList<UserInfo>() {
{
add(new UserInfo());
}})</