Java 中的 @NotNull、@NotEmpty 和 @NotBlank 的区别
在 Java 编程中,验证输入是很重要的,我们可以通过注解来确保变量符合特定的要求。而
@NotNull
、
@NotEmpty
和
@NotBlank
是常见的三种校验注解,分别用来检查值是否为空,但它们的作用有一些微妙的不同。下面,我们将用最通俗的方式讲解它们的区别,便于理解和应用。
1. @NotNull
-
含义:
@NotNull
意味着字段值不能为null
。 -
适用类型:任何对象类型,例如
String
、List
、Map
等。 -
实际含义:如果一个变量是
null
,那么就违反了@NotNull
的规则。 -
例子:
@NotNull private String username;
上面的代码意味着
username
这个字段不可以是null
,但如果username
是一个空字符串""
,那也是符合要求的。
总结:@NotNull
仅仅检查值是否为 null
,不管内容是空还是非空。
2. @NotEmpty
-
含义:
@NotEmpty
意味着字段不能为null
,并且不能为空集合或空字符串。 -
适用类型:集合、字符串等需要既有非
null
值又有一定长度的类型。 -
实际含义:不仅不能为
null
,而且长度必须大于 0(对集合来说,需要至少有一个元素;对字符串来说,不能为空字符串)。 -
例子:
@NotEmpty private String username;
如果
username
是null
或者是""
,它都不符合@NotEmpty
的要求。
总结:@NotEmpty
用来确保字段不为空对象,也不为空集合或空字符串。
3. @NotBlank
-
含义:
@NotBlank
意味着字段不能为null
,且不应该为空白字符串。 -
适用类型:专门用于字符串。
-
实际含义:不允许
null
值,不允许空字符串""
,也不允许仅由空格组成的字符串(如" "
)。 -
例子:
@NotBlank private String username;
这里
username
必须有实际的非空内容,比如"Alice"
。null
、""
和" "
都不符合@NotBlank
的要求。
总结:@NotBlank
不允许字符串是 null
、空字符串或仅由空白字符组成。
使用场景小结
- @NotNull:用于任何对象,确保不为
null
。例如,数据库的主键 ID 不允许是null
。 - @NotEmpty:用于集合或字符串,确保不为
null
且长度大于 0。例如,用户至少需要选择一个爱好。 - @NotBlank:用于字符串,确保有非空白的内容。例如,用户名不允许只输入空格。
小总结
注解 | 是否允许 null | 是否允许空字符串 "" | 是否允许空白字符字符串 " " |
---|---|---|---|
@NotNull | 否 | 是 | 是 |
@NotEmpty | 否 | 否 | 是 |
@NotBlank | 否 | 否 | 否 |
希望这个简单的总结能帮助你更清楚地选择合适的注解,确保代码中的数据符合预期。
推荐阅读文章
- 由 Spring 静态注入引发的一个线上T0级别事故(真的以后得避坑)
- 如何理解 HTTP 是无状态的,以及它与 Cookie 和 Session 之间的联系
- HTTP、HTTPS、Cookie 和 Session 之间的关系
- 什么是 Cookie?简单介绍与使用方法
- 什么是 Session?如何应用?
- 使用 Spring 框架构建 MVC 应用程序:初学者教程
- 有缺陷的 Java 代码:Java 开发人员最常犯的 10 大错误
- 如何理解应用 Java 多线程与并发编程?
- 把握Java泛型的艺术:协变、逆变与不可变性一网打尽
- Java Spring 中常用的 @PostConstruct 注解使用总结
- 如何理解线程安全这个概念?
- 理解 Java 桥接方法
- Spring 整合嵌入式 Tomcat 容器
- Tomcat 如何加载 SpringMVC 组件
- “在什么情况下类需要实现 Serializable,什么情况下又不需要(一)?”
- “避免序列化灾难:掌握实现 Serializable 的真相!(二)”
- 如何自定义一个自己的 Spring Boot Starter 组件(从入门到实践)
- 解密 Redis:如何通过 IO 多路复用征服高并发挑战!
- 线程 vs 虚拟线程:深入理解及区别
- 深度解读 JDK 8、JDK 11、JDK 17 和 JDK 21 的区别
- 10大程序员提升代码优雅度的必杀技,瞬间让你成为团队宠儿!
- “打破重复代码的魔咒:使用 Function 接口在 Java 8 中实现优雅重构!”
- Java 中消除 If-else 技巧总结
- 线程池的核心参数配置(仅供参考)
- 【人工智能】聊聊Transformer,深度学习的一股清流(13)
- Java 枚举的几个常用技巧,你可以试着用用
原文地址:https://blog.csdn.net/qq_35971258/article/details/143696615
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!