Java之验证框架
Java之验证框架
分层验证与JavaBean验证
分层验证模型
Java Bean验证模型
Bean Validation简介
Bean Validation为JavaBean验证定义了相应的元数据模型和API。 –维基百科
常用约束注解
- 空值校验类:@Null,@NotNull,@NotEmpty,@NotBlank等
- 范围校验类:@Min,@Size,@Digits,@Future,@Negative等
- 其他校验类:@Email,@URL,@AssertTrue,@Pattern等
代码案例
引入依赖
1 | <!--Validation相关依赖--> |
空值约束
@NotNull
1
2
3
4
5/**
* 用户id
*/
private String userId;
@NotBlank
- 注意:自动去掉字符串前后空格后验证是否为空
1
2
3
4
5
6/**
* 用户密码
* NotBlank 自动去掉字符串前后空格后验证是否为空
*/
private String password;
@NotEmpty
- 不会自动去掉前后空格
1
2
3
4
5
6/**
* 用户名
* NotEmpty 不会自动去掉前后空格
*/
private String userName;
范围约束
@Min
和@Max
- 最小和最大
1
2
3
4
5
6/**
* 年龄
*/
private Integer age;
@Size
1
2
3
4
5/**
* 好友列表
*/
private List<UserInfo> friends;
@Length
1
2
3
4
5/**
* 用户密码
*/
private String password;
其他约束
@Past
1
2
3
4
5/**
* 生日
*/
private Date birthday;
@Email
1
2
3
4
5/**
* 邮箱
*/
private String email;
级联约束
@Valid
1
2
3
4
5/**
* 好友列表
* 级联验证:@Valid
*/
private List< UserInfo> friends;
分组约束
groups
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49package com.java.example.validation;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
import javax.validation.constraints.Email;
import javax.validation.constraints.NotNull;
/**
* 待验证对象实体类
* 用户信息类
*
* @author jingLv
* @date 2020/11/09
*/
public class UserInfo {
/**
* 登录场景
*/
public interface LoginGroup {
}
/**
* 注册场景
*/
public interface RegisterGroup {
}
/**
* 用户id
*/
private String userId;
/**
* 邮箱
*/
private String email;
}
组序列约束
@GroupSequence
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59package com.java.example.validation;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
import javax.validation.GroupSequence;
import javax.validation.constraints.Email;
import javax.validation.constraints.NotNull;
import javax.validation.groups.Default;
/**
* 待验证对象实体类
* 用户信息类
*
* @author jingLv
* @date 2020/11/09
*/
public class UserInfo {
/**
* 登录场景
*/
public interface LoginGroup {
}
/**
* 注册场景
*/
public interface RegisterGroup {
}
/**
* 组排序场景
*/
public interface Group {
}
/**
* 用户id
*/
private String userId;
/**
* 邮箱
*/
private String email;
}
校验参数
@Valid
约束对象(入参)需要验证
校验返回值
@Valid
约束对象(出参)需要验证
校验构造方法
@Valid
约束对象(构造函数参数)需要验证
实战案例
完成验证的步骤:
- 约束注解的定义
- 约束验证规则(约束验证器)
- 约束注解的声明
- 约束验证流程
自定义手机号约束注解:
- 定义@interface Phone注解
- 实现约束验证器PhoneValidator.java
- 声明@Phone约束注解
- 执行手机号约束验证流程
规范编程的常见名词
JCP、JSR简介
JCP(Java Community Process)成立与1998年,是使有兴趣的各方参与定义Java的特征和未来版本的正式过程。
JCP使用JSR(Java规范请求,Java Specification Request)作为正式规范文档,描述被提议加入到Java体系中的规范和技术。
– 维基百科
有关数据校验:JSR303、JSR349、JSR380
- JSR303,Bean Validation 1.0,jdk1.6
- JSR349,Bean Validation 1.1,jdk1.7
- JSR380,Bean Validation 2.0,jdk1.8
Bean Validation与Hibernate Validator
- Bean Validation 1.0参考实现:Hibernate Validator 4.3.1.Final
- Bean Validation 1.1参考实现:Hibernate Validator 5.1.1.Final
- Bean Validation 2.0参考实现:Hibernate Validator 6.0.1.Final
Hibernate Validator与Spring Validation
Spring Validation在Hibernate Validator的基础上,对其进行了二次封装,以满足在Spring环境中更简单、高效的对数据进行验证。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Jing's Blog!