原创

SpringBoot 实体对象字段校验

温馨提示:
本文最后更新于 2022年11月18日,已超过 516 天没有更新。若文章内的图片失效(无法正常加载),请留言反馈或直接联系我

表单数据提交的时候,前端的校验可以使用一些类似于jQuery Validate等js插件实现,而后端我们可以使用Hibernate validatior来做校验。
如果使用SpringBoot2.3之前框架作为基础,那么就已经自动集成了Hibernate validatior。

使用步骤

第一步:首先在实体的属性上添加对应的校验规则,比如:

@TableName("m_user")
public class User implements Serializable {
    private static final long serialVersionUID = 1L;
    @TableId(value = "id", type = IdType.AUTO)
    private Long id;
    @NotBlank(message = "昵称不能为空")
    private String username;
    @NotBlank(message = "邮箱不能为空")
    @Email(message = "邮箱格式不正确")
    private String email;
    
    ...
}

第二步 :这里我们使用@Validated注解方式,如果实体不符合要

求,系统会抛出异常,那么我们的异常处理中就捕获到MethodArgumentNotValidException。

/**
 * 测试实体校验
 * @param user
 * @return
 */
@PostMapping("/save")
public Object testUser(@Validated @RequestBody User user) {
    return user.toString();
}

第三步:测试结果

SpringBoot2.3之后的版本就取消了,就需要手动加上去依赖包。

原版本如下:

<dependency>
      <groupId>org.hibernate.validator</groupId>
      <artifactId>hibernate-validator</artifactId>
      <version>6.0.17.Final</version>
      <scope>compile</scope>
 </dependency>

方法一:

根据官方文档,手动引入spring-boot-starter-validation

<dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-validation</artifactId>
 </dependency>

方法二:

手动引入hibernate-validator。(因为spring-boot-starter-validation主要是引入hibernate-validator依赖)

<dependency>
      <groupId>org.hibernate.validator</groupId>
      <artifactId>hibernate-validator</artifactId>
      <!--<version>6.0.17.Final</version>
      <scope>compile</scope>--!>
 </dependency>

校验模式注解

1、校验模式分类
(1)普通模式:会校验完所有的属性,然后返回所有的验证失败信息
(2)快速失败返回模式:只要有一个验证失败,则返回
2、校验注解

@Null		被注释的元素必须为null
@NotNull	被注释的元素不能为null
@NotEmpty	验证注解元素值不为null且不为空(字符串长度不为0、集合大小不为0)
@NotBlank	验证注解的元素值不为空(不为null、去除首位空格后长度为0)
@AssertTrue	被注释的元素必须为true
@AssertFalse	被注释的元素必须为false
@Min(value=x)	被注释的元素必须是一个数字,其值必须大于等于指定的最小值
@Max(value=x)	被注释的元素必须是一个数字,其值必须小于等于指定的最大值
@DecimalMin(value=x)	被注释的元素必须是一个数字,其值必须大于等于指定的最小值
@DecimalMax(value=x)	被注释的元素必须是一个数字,其值必须小于等于指定的最大值
@Email		被注释的元素必须是电子邮件地址
@Past		被注释的元素必须是一个过去的日期
@Future		被注释的元素必须是一个将来的日期
@Digits(integer=整数位数, fraction=小数位数)	被注释的元素必须是一个数字,验证注解的元素值的整数位数和小数位数上限
@Pattern(regex=正则表达式, flag=)	被注释的元素必须符合指定的正则表达式。
@Size(min=最小值,max=最大值)		被注释的元素的大小必须在指定的范围内。
@Length(min=最小值, max=最大值)		被注释的字符串的大小必须在指定的范围
@Range(min=最小值, max=最大值)		被注释的元素必须在合适的范围内

延伸:
@NotEmpty、@NotNull、@NotBlank区别
@NotEmpty :不能为null,且Size>0,@NotEmpty注解的String、Collection、Map、数组是不能为null或长度为0
@NotNull:不能为null,但可以为empty,没有Size的约束,带注释的元素不能为null,接受任何类型
@NotBlank:只用于String,不能为null且trim()之后size>0,纯空格的String也是不符合规则的,此注解只能用于验证String类型

正文到此结束
该篇文章的评论功能已被站长关闭
本文目录