浅谈Spring中@NotEmpty、@NotBlank、@NotNull区别
作者:x@lijun 发布时间:2023-01-02 08:15:49
1:引入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>2.0.5.RELEASE</version>
</dependency>
@NotEmpty、@NotBlank、@NotNull 包的位置:
import javax.validation.constraints.*;
2:区别
@NotNull
适用于基本数据类型(Integer,Long,Double等等),当 @NotNull 注解被使用在 String 类型的数据上,则表示该数据不能为 Null(但是可以为 Empty)
注:被其标注的字段可以使用 @size、@Max、@Min 对字段数值进行大小的控制
@NotBlank
适用于 String 类型的数据上,加了@NotBlank 注解的参数不能为 Null 且 trim() 之后 size > 0,必须有实际字符
@NotEmpty
适用于 String、Collection集合、Map、数组等等,加了@NotEmpty 注解的参数不能为 Null 或者 长度为 0
3:使用方法
@Data
public class BigPeople {
@ApiModelProperty(value = "id" ,required = true)
@NotNull(message = "id不能为空")
@Length(message = "id不能超过{max}个长度",max = 10)
private Integer id;
@ApiModelProperty(value = "name" ,required = true)
@NotBlank(message = "name不能为空")
@Size(message = "名字最长为{max} 个字",max = 10)
private String name;
@ApiModelProperty(value = "age" ,required = true)
@NotNull(message = "id不能为空")
@Range(message = "age的长度范围为{min}岁到{max}岁之间",min = 5,max = 10)
private Integer age;
@ApiModelProperty(value = "treeNode" ,required = true)
@NotEmpty(message = "treeNode不能为空")
private List<String> treeNode;
}
@Valid 包位置:
import javax.validation.Valid;
@Validated 包的位置
import org.springframework.validation.annotation.Validated;
@ApiOperation(value = "新增或者修改一个人的信息")
@PostMapping("/updateOrInsert")
public Result updateOrInsert(@Valid @RequestBody Person person){
Boolean updateOrInsert = personService.updateOrInsert(person);
if (updateOrInsert) {
return new Result(ResultCode.SUCCESS,updateOrInsert);
}
return new Result(ResultCode.ERROR, "新增或者修改一个人的信息失败");
}
@ApiOperation(value = "新增或者修改一个人的信息")
@PostMapping("/updateOrInsert")
public Result updateOrInsert(@Validated @RequestBody Person person){
Boolean updateOrInsert = personService.updateOrInsert(person);
if (updateOrInsert) {
return new Result(ResultCode.SUCCESS,updateOrInsert);
}
return new Result(ResultCode.ERROR, "新增或者修改一个人的信息失败");
}
最上面三个注释: 必须需要搭配@Valid 或者@Validated使用,在检验Controller的入参是否符合规范时
@Valid 和 @Validated 比较
最后我们来对 @Valid 和 @Validated 两个注解进行总结下:
1:@Valid 和 @Validated 两者都可以对数据进行校验,待校验字段上打的规则注解(@NotNull, @NotEmpty等)都可以对 @Valid 和 @Validated 生效;
2:@Valid 进行校验的时候,需要用 BindingResult 来做一个校验结果接收。当校验不通过的时候,如果手动不 return ,则并不会阻止程序的执行;
3:@Validated 进行校验的时候,当校验不通过的时候,程序会抛出400异常,阻止方法中的代码执行,这时需要再写一个全局校验异常捕获处理类,然后返回校验提示。
4:总体来说,@Validated 使用起来要比 @Valid 方便一些,它可以帮我们节省一定的代码,并且使得方法看上去更加的简洁。
此包下其它常用的校验注解:
注解 | 含义 |
---|---|
@Null | 元素必须为null |
@NotNull | 元素不能null |
@AssertTrue | 元素必须为true |
@AssertFalse | 元素必须是false |
@Min(value) | 元素必须是一个数字,其值必须大于等于指定的最小值 |
@Max(value) | 元素必须是一个数字,其值必须小于等于指定的最大值 |
@DecimalMin(value) | 元素必须是一个数字,其值必须大于等于指定的最小值 |
@DecimalMax(value) | 元素必须是一个数字,其值必须小于等于指定的最大值 |
@Size(max,min) | 元素的大小必须在指定的范围内 |
@Digits(integer,fraction) | 元素必须是一个数字,其值必须在可接受的范围内 |
@Past | 元素必须是一个过去的日期 |
@Future | 元素必须是一个将来的日期 |
@Pattern(value) | 元素必须符合指定的正则表达式 |
@Length @NotEmpty @Range | 1:元素必须是电子邮箱地址 2:字符串的大小必须在指定的范围内 3:字符串必须非空 4:元素必须在合理的范围内 |
来源:https://blog.csdn.net/XikYu/article/details/128869563
猜你喜欢
- Java中的字符串常量池Java中字符串对象创建有两种形式,一种为字面量形式,如String str = "droid"
- 基本概念Java中创建对象时,一旦程序终止,创建的对象可能就不存在.要想使得对象能够在程序不运行的状态下依然能够保存对象的信息,这时就需要用
- String[, ,] items = new String[,,] { { { "A1", "A2"
- 一、前言我们在日常学习中,对一个java代码有问题,不知道jvm内部怎么进行解析的时候;有个伟大壮举就是反编译,这样就可以看到jvm内部怎么
- 前言:文件的上传和下载在日常开发中很是常见,那么这一功能是如何实现的呢,下面我给大家介绍一下实现条件:1、需要一个form标签,method
- 一、背景今天心血来潮,准备测试一下项目中 logback 的自动刷新功能,但是测试时发现并不生效。logback 的配置如下:<con
- 五子棋游戏(Java),供大家参考,具体内容如下思路:1.首先创建一个棋盘,建立一个二维数组,此文中为一个15*15的二维数组,2.初始化棋
- ⭐️前面的话⭐️本篇文章带大家认识Java语法——泛型与通配符,泛型和通配符是一个非常抽象的概念,简
- 1. 前言本节将对 Spring Security 中的密码编码进行一些探讨。2. 不推荐使用md5首先md5 不是加密算法,是哈希摘要。以
- 说起双亲委派模型,不得不说一下类加载器。类加载器是什么?当我们编译Java类时,JVM会创建与平台和机器无关的字节码。字节码存储在.clas
- goto在Java中是一个保留字,但在语言中并没有用到它;Java没有goto。但是,Java也能完成一些类似于跳转的操作,主要是依靠:标签
- 简介对于一个APP来说,肯定会有一个AppBar,这个AppBar一般包含了APP的导航信息等。虽然我们可以用一个固定的组件来做为AppBa
- 当一个Java开发人员加入到Groovy的开发之旅的时候,他/她经常带着Java思想去思考,并逐步地学习Groovy,每次学习一个特性,这会
- 需求使用 spring-boot 项目开发中,项目启动时“非常”慢的。如果每次修改代码或静态资源文件后都需要重新启动项目,这是多么痛苦的事。
- 本文实例讲述了java在网页上面抓取邮件地址的方法。分享给大家供大家参考。具体实现方法如下:import java.io.BufferedR
- 循环队列结构队列特点队列为一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,
- 目录ActivityView常用事件接口设置监听的几种方法1)让Activity实现接口2) 匿名内部类3) onClick可以在xml中设
- 前言提问:springboot项目,开发环境、测试环境和生产环境配置文件如何分开表示?答:多profile文件方式1、多环境配置(profi
- 一、平衡二叉树的定义平衡二叉树是一种二叉排序树,其中每一个节点的左子树和右子树的高度差至多等于1 。它是一种高度平衡的二叉排序树。意思是说,
- JSR303介绍在Java中提供了一系列的校验方式这些校验方式在javax.validation.constraints包中引入依赖<