1. 概述
本文介绍在Spring Boot中实现对请求的数据进行校验。数据校验常用到概念:
- JSR303/JSR-349: JSR303是一项标准,只提供规范不提供实现,规定一些校验规范即校验注解,如@Null,@NotNull,@Pattern,位于javax.validation.constraints包下。JSR-349是其的升级版本,添加了一些新特性。
- hibernate validation:hibernate validation是对这个规范的实现,并增加了一些其他校验注解,如@Email,@Length,@Range等等
- spring validation:spring validation对hibernate validation进行了二次封装,在springmvc模块中添加了自动校验,并将校验信息封装进了特定的类中
本文主要包括如下内容:
- 演示spring boot validation + 异常捕获机制实现数据自动校验功能
- 自定义校验注解,并演示这个用法
2. 演示spring boot的数据自动校验功能
功能:向服务发送请求,这个请求带上参数,服务需要对参数进行校验。
2.1. Result
封装返回处理结果,如果code=200,则表示添加成功,code=400,则表示输入的数据异常
public class Result {
private int code;
private String message;
// set/get方法略
…
}
2.2. CustomerDto:
客户端的请求封装到这个dto中。使用校验注解注解此类的成员属性。这些注解的功能看名称就可以看出来。其中 @PhoneValidation就我们自定义的注解,这个后面会说明。每个注解里有个属性message,如果我们不想使用系统默认提供的报错信息,我们可以修改这个值
public class CustomerDto {
@Size(min=2, max=30)
private String name;
// 自定义错误信息
@NotEmpty(message = "自定义错误信息,Email不能为空")
@Email
private String email;
@NotNull
@Min(18) @Max(100)
private Integer age;
@NotNull
private Gender gender;
@DateTimeFormat(pattern="MM/dd/yyyy")
@NotNull @Past
private Date birthday;
// 自定义规则注解
@PhoneValidation
private String phone;