参数校验 Hibernate-Validator

需求

在 RESTful 的接口服务中,会有各类各样的入参,咱们不可能彻底不作任何校验就直接进入到业务处理的环节,一般咱们会有一个基础的数据验证的机制,待这些验证过程完毕,结果无误后,参数才会进入到正式的业务处理中。java

而数据验证又分为两种git

  • 一种是无业务关联的规则性验证
  • 一种是根据现有数据进行的联动性数据验证(简单来讲,参数的合理性,须要查数据库,好比用户名不能重复)

第二中只能通常只能在业务中校验,但第一种能够经过 Hibernate-Validator 来作无业务关联的规则性验证。web

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 的依赖。 spring

依赖关系

注解

来自 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 的注解bash

import org.hibernate.validator.constraints.Length;
import org.hibernate.validator.constraints.Range;

//被注释的元素必须在合适的范围内
@Range(min =, max =, message = "")

//被注释的字符串的大小必须在指定的范围内
@Length(min =, max =, message = "")

复制代码

@NotBlank、@NotNull、@NotEmpty 的区别

  • @NotBlank:用于字符串上,值不能为null,且调用trim()后,长度必须大于0
  • @NotNull:用于基本类型及封装类型上,值不能为null
  • @NotEmpty:用于集合类上,且集合长度必须大于0

示例

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不起做用 框架

相关文章
相关标签/搜索