Spring 中@NotNull, @NotEmpty和@NotBlank之间的区别是什么?

2023-11-09

简述三者区别

@NotNull://CharSequence, Collection, Map 和 Array 对象不能是 null, 但可以是空集(size = 0)。  
@NotEmpty://CharSequence, Collection, Map 和 Array 对象不能是 null 并且相关对象的 size 大于 0。  
@NotBlank://String 不是 null 且去除两端空白字符后的长度(trimmed length)大于 0。 

注解的定义(在version 4.1中):

1、@NotNull:

定义如下:
@Constraint(validatedBy = {NotNullValidator.class})
这个类中有一个isValid方法是这么定义的:
public boolean isValid(Object object, ConstraintValidatorContext constraintValidatorContext) { return object != null; } 
对象不是null就行,其他的不保证。

2、@NotEmpty:

定义如下:
@NotNull    
@Size(min = 1)  

也就是说,@NotEmpty除了@NotNull之外还需要保证@Size(min=1),这也是一个注解,这里规定最小长度等于1,也就是类似于集合非空。

3、@NotBlank:

@NotNull    
@Constraint(validatedBy = {NotBlankValidator.class})  

类似地,除了@NotNull之外,还有一个类的限定,这个类也有isValid方法:

if ( charSequence == null ) {  //curious   
  return true; } return charSequence.toString().trim().length() > 0; 

有意思的是,当一个string对象是null时方法返回true,但是当且仅当它的trimmed length等于零时返回false。即使当string是null时该方法返回true,但是由于@NotBlank还包含了@NotNull,所以@NotBlank要求string不为null。

示例:

String name = null;
@NotNull: false
@NotEmpty: false @NotBlank: false String name = ""; @NotNull: true @NotEmpty: false @NotBlank: false String name = " "; @NotNull: true @NotEmpty: true @NotBlank: false String name = "Great answer!"; @NotNull: true @NotEmpty: true @NotBlank: true 

彩蛋

一、常用的校验注解
(1)常用标签
@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) 被注释的元素必须符合指定的正则表达式。 @Email 被注释的元素必须是电子邮件地址 @Length 被注释的字符串的大小必须在指定的范围内 @NotEmpty 被注释的字符串必须非空 @Range 被注释的元素必须在合适的范围内

转载于:https://www.cnblogs.com/cl-rr/p/11474469.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Spring 中@NotNull, @NotEmpty和@NotBlank之间的区别是什么? 的相关文章

随机推荐

  • ubuntu使用记录(2)在ubuntu下安装ssh时一直显示E: 无法定位软件包 sshd

    在ubuntu下安装ssh时一直显示E 无法定位软件包 sshd 安装方法 点击我们屏幕左上角的小齿轮 设置 gt 关于 gt 系统设置 gt 软件和更新 在点击其他后会跳出 我们直接点击选择最佳服务器即可 我电脑上是清华的最快
  • LeetCode 135. 分发糖果--排序判断

    分发糖果 老师想给孩子们分发糖果 有 N 个孩子站成了一条直线 老师会根据每个孩子的表现 预先给他们评分 你需要按照以下要求 帮助老师给这些孩子分发糖果 每个孩子至少分配到 1 个糖果 评分更高的孩子必须比他两侧的邻位孩子获得更多的糖果 那
  • 面试题2021.11.29----java基础

    2021 11 29 java基础 1 请你解释为什么会出现4 0 3 6 0 40000001这种现象 答 这是因为二进制数没办法准确的表示十进制数的数 十进制的小数在转化为二进制是会有误差 导致该运算结果的诞生 2 请你说说Lamda表
  • Exps on March 25th

    时差 What s your time there What time is it over there 在你那里 现在是几点啊 Greenwich Mean Time GMT 格林威治时间 0时区 伦敦标准时间China is locat
  • 操作系统怎么访问docker内的MySQL

    操作系统怎么访问docker内的MySQL 怎么访问docker内的MySQL 1 获取mysql镜像 docker pull mysql 5 6 2 启动mysql镜像 推荐学习 MySQL视频教程 docker run itd P my
  • 源码阅读心得

    简单记录一下自己最近一段时间阅读一个C语言开源项目的心得 1 阅读工具 source insight 4 0 gdb Typora 2 阅读心得 1 不要陷在代码的实现细节里面出不来 浪费时间 因为稍微大一点的开源项目 都有很多自定义的结构
  • 目标检测之性能指标

    推荐文章 https www cnblogs com isLinXu p 15893489 html
  • 小白循环神经网络RNN LSTM 参数数量 门单元 cell units timestep batch_size

    小白循环神经网络RNN LSTM 参数数量 门单元 cell units timestep batch size RNN循环神经网络 timestep batch size LSTM及参数计算 keras中若干个Cell例如LSTMCell
  • 使用内网穿透实现Blynk服务器远程访问

    使用内网穿透实现Blynk服务器远程访问 使用内网穿透实现Blynk服务器远程访问 1 安装宝塔面板和docker管理器 2 登陆小米球控制台 3 运行小米球linux版本软件 4 手机APP访问和网页访问 5 总结 使用内网穿透实现Bly
  • torch.device

    问题 device torch device cuda if torch cuda is available else cpu AttributeError module object has no attribute device tor
  • linux-basic(12)正则表达式与文件格式化处理

    12 1 1 什么是正则表达式 1 简单说 正则表示法就是处理字串的方法 他是以行为单位来进行字串的处理行为 正则表达式透过一些特殊符号的辅助 可以让使用者轻易的达到查找 删除 替换某特定字串的处理程序 12 1 5 扩展的正则表达式 正则
  • VirtualBox中Ubuntu 14.04 LTS安装GATE7.1

    开发环境 win7 VirtualBox Ubuntu 14 04 LTS 主要参考博客 1 Compilation Instructions V7 1 2 Gate7 1在Ubuntu下编译 3 Package Requirements
  • 面试官:你了解数据安全传输吗?

    鄢栋 微医云服务团队前端工程师 有志成为一名全栈开发工程师甚至架构师 路漫漫 吾求索 生活中通过健身释放压力 思考问题 看到这个标题 很多老铁会斩钉截铁的说 这道题我会 就是用 HTTPS 来进行安全传输的 对 很优秀 那你知道 HTTPS
  • Spring - SpringMVC(一)

    SpringMVC 第一章 SpringMVC入门 补充 浏览器地址中的绝对路径 代表的就是端口后面 哪怕你在配置文件中配置了项目的映射名 也是端口后面 不是映射名后面 它会直接忽视项目的映射名 只代表端口后边 知识点 概述 1 目标 了解
  • 不同数据类型的相关性分析总结

    在进行数据建模之前 我们一般会进行数据探索和描述性分析 发现数据规律及数据之间的相关性 本文主要从检验方法和可视化图形两个方面对不同数据类型的相关性分析方法进行总结 以加强对数据的了解和认识 为建模打下基础 目录 一 不同数据类型的相关性总
  • STL十大容器 之 list

    特点 内存不连续 底层实现是链表 插入和删除的效率比较快 随机访问效率比较低 和vector相比 不再需要 capacity 和 reserve 操作 因为链表没有大小限制 不需要为了效率增加预分配内存的功能 一 插入和删除 push ba
  • vue中从对象数组中拿到每一个对象的其中一个字段作为下拉框的选项

    原因分析 因为是对象数组 所以不能单纯的用this指向来赋值 解决方案 直接上代码 用到ES6的map 方法 具体使用不懂的还请自己百度哦 这是下拉框的代码
  • 记一次网易前端面试

    很幸运地能收到网易的面试通知 就毫不犹豫翘了课去面试了 hhhh 三点的面试 因为从来没去过那个中关村西北旺区 吃完饭早早就去了 想象中那里应该是繁华的地方 hhhh 到了发现都在建设中 很多还在建设中 看到了网易旁边的百度和搜狐 都是长长
  • OpenCV学习笔记——用haar特征训练自己的分类器(再做手势检测)

    之前介绍过一篇利用级联分类器对目标进行检测的文章http blog csdn net yang xian521 article details 6973667 用的就是haar特征 发现OpenCV自带的库里的haar特征只有人脸 人脸的器
  • Spring 中@NotNull, @NotEmpty和@NotBlank之间的区别是什么?

    简述三者区别 NotNull CharSequence Collection Map 和 Array 对象不能是 null 但可以是空集 size 0 NotEmpty CharSequence Collection Map 和 Array