在 RESTful 的接口服务中,会有各种各样的入参,我们不可能完全不做任何校验就直接进入到业务处理的环节,通常我们会有一个基础的数据验证的机制,待这些验证过程完毕,结果无误后,参数才会进入到正式的业务处理中。
而数据验证又分为两种
第二中只能一般只能在业务中校验,但第一种可以通过 Hibernate-Validator 来做无业务关联的规则性验证。
Hibernate-Validator的主要使用的方式就是注解的形式,并且是“零配置”的,无需配置也可以使用。
<dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-validator</artifactId> <version>6.0.17.Final</version> </dependency> 复制代码
如果项目的框架是 spring boot 的话,在 spring-boot-starter-web 中已经包含了 Hibernate-validator 的依赖。
来自 javax.validation.constraints 的注解
import javax.validation.constraints.*; //被注释的元素,值必须是一个字符串,不能为null,且调用trim()后,长度必须大于0 @NotBlank(message = "") //被注释的元素,值不能为null,但可以为"空",用于基本数据类型的非空校验上,而且被其标注的字段可以使用 @size、@Max、@Min 等对字段数值进行大小的控制 @NotNull(message = "") //被注释的的元素,值不能为null,且长度必须大于0,一般用在集合类上面 @NotEmpty(message = "") //被注释的元素必须符合指定的正则表达式。 @Pattern(regexp = "", message = "") //被注释的元素的大小必须在指定的范围内。 @Size(min =, max =) //被注释的元素,值必须是一个数字,且值必须大于等于指定的最小值 @Min(value = long以内的值, message = "") //被注释的元素,值必须是一个数字,且值必须小于等于指定的最大值 @Max(value = long以内的值, message = "") //被注释的元素,值必须是一个数字,其值必须大于等于指定的最小值 @DecimalMin(value = 可以是小数, message = "") //被注释的元素,值必须是一个数字,其值必须小于等于指定的最大值 @DecimalMax(value = 可以是小数, message = "") //被注释的元素,值必须为null @Null(message = "") //被注释的元素必须是一个数字,其值必须在可接受的范围内 @Digits(integer =, fraction =) //被注释的元素,值必须为true @AssertTrue(message = "") //被注释的元素,值必须为false @AssertFalse(message = "") //被注释的元素必须是一个过去的日期 @Past(message = "") //被注释的元素必须是一个将来的日期 @Future(message = "") //被注释的元素必须是电子邮件地址 @Email(regexp = "", message = "") 复制代码
来自 org.hibernate.validator.constraints 的注解
import org.hibernate.validator.constraints.Length; import org.hibernate.validator.constraints.Range; //被注释的元素必须在合适的范围内 @Range(min =, max =, message = "") //被注释的字符串的大小必须在指定的范围内 @Length(min =, max =, message = "") 复制代码
import lombok.Data; import org.hibernate.validator.constraints.Range; import javax.validation.constraints.NotBlank; import javax.validation.constraints.Pattern; @Data public class RegisterDTO { @NotBlank(message = "用户名不能为空") private String userName; @NotBlank(message = "密码不能为空") private String password; @NotBlank(message = "真实姓名不能为空") private String realName; @Range(min = 0, max = 99, message = "年龄应该在0到99之间") private Integer age; @Pattern(regexp = "男|女", message = "必须是男或女") private String sex; @Pattern(regexp = "//d{3}-//d{8}|//d{4}-//d{7}|//d{11}", message = "号码不正确") private String telephone; } 复制代码
注意使用@NotBlank等注解时,一定要和@valid一起使用,不然@NotBlank不起作用