@NotNull, @NotBlank,@NotEmpty,你用对了吗?

常用的校验注解之 @NotNull、@NotBlank、@NotEmpty 的区别 实体字段校验 @NotNull、@NotEmpty、@NotBlank 1.@NotNull 不能为 null,但可以为 empty,一般用在 Integer 类型的基本数据类型的非空校验上,而且被其标注的字段可以使用 @size、@Max、@Min 对字段数值进行大小的控制 2.@NotEmpty 不能为 null,且长度必须大于 0,一般用在集合类上 3.@NotBlank 只能作用在接收的 String 类型上,注意是只能,不能为 null,而且调用 trim() 后,长度... 阅读详情
AI摘要

本文详细介绍了Java Bean Validation中@NotNull、@NotEmpty和@NotBlank三个注解。阐述了它们的作用、适用类型、校验条件,通过对比展示差异,并给出使用场景示例。合理使用这些注解,可确保数据完整性和有效性,减少运行时错误。

@NotNull、@NotEmpty 和 @NotBlank 是 Java Bean Validation(如 Hibernate Validator)中常用的注解,用于校验字段的有效性。它们之间有不同的适用场景和约束条件。这篇文章,我们将详细解释它们的区别及使用场景。

1. @NotNull

@NotNull的作用是仅确保字段不为 null。因此,对于字符串来说,允许为空字符串 ("");对于集合等,也只检查是否为 null,不检查是否为空集合。

@NotNull适用于任何类型的对象(如字符串、集合、自定义对象等)。

如下示例,展示了@NotNull注解的使用:

public class User {
    @NotNull(message = "用户名不能为空")
    private String username;
}

2. @NotEmpty

@NotEmpty 的作用是确保字段不为 null,且不为空。因此,对于字符串来说,长度必须大于 0,""(空字符串)被认为是无效的;对于集合等,大小必须大于 0。

@NotEmpty 可以适用于以下几种类型:

  • String
  • Collection(如 List, Set)
  • Map
  • Array

如下示例,展示了@NotEmpty注解的使用::

public class User {
    @NotEmpty(message = "用户名不能为空")
    private String username;

    @NotEmpty(message = "角色列表不能为空")
    private List<String> roles;
}

3. @NotBlank

@NotBlank的作用是确保字符串不为 null,且.trim()后长度大于 0(即不仅不为空,还至少包含一个非空白字、制表符等)。

@NotBlank仅适用于 String 类型。

如下示例,展示了@NotBlank注解的使用:

public class User {
    @NotBlank(message = "密码不能为空")
    private String password;
}

4. 三者对比

下面通过一张图表,对三者进行详细的对比:

注解适用类型校验条件@NotNull任意引用类型对象不为 null@NotEmptyString,Collection,Map,Array对象不为 null,且长度或大小大于 0@NotBlankString字符串不为 null,且.trim()后长度大于 0

5. 使用场景

  • @NotNull:当只需要确保某个字段被赋值(不关心内容)时。例如,用户的ID字段在数据库中不能为空。
  • @NotEmpty:当需要确保某个集合或字符串不仅被赋值,而且包含至少一个元素或字符时。例如,用户注册时需要至少有一个角色。
  • @NotBlank:当需要确保字符串不仅被赋值,而且包含实际的非空白字符时。例如,用户注册时的密码字段不能只是空格。

6. 示例代码

下面我们通过一个示例同时演示 3个注解的使用:

import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;

public class User {

    @NotNull(message = "用户ID不能为空")
    private Long id;

    @NotEmpty(message = "用户名不能为空")
    private String username;

    @NotBlank(message = "密码不能为空且不能全为空白")
    private String password;

    @NotEmpty(message = "角色列表不能为空")
    private List<String> roles;

    // Getters and Setters
}

在上述示例中:

  • id 只需要不为 null。
  • username 需要不为 null 且不为空字符串。
  • password 需要不为 null,不为空字符串,并且至少包含一个非空白字符。
  • roles 需要不为 null,且至少包含一个角色。

7. 总结

本文,我们详细地分析了三个注解以及它们之间地对比。@NotNull仅校验对象不为null,适用于所有引用类型;@NotEmpty确保集合、数组或字符串不为null且有长度;@NotBlank专用于字符串,要求不为null、不为空且包含非空白字符。根据字段类型和校验需求选择合适的注解,以确保数据的完整性和有效性。

通过合理使用这些注解,可以确保数据的完整性和有效性,减少潜在的运行时错误。

Java注解之@NotBlank,一文掌握@NotBlank注解知识(1) 在使用 @NotEmpty 和 @NotBlank 进行字符串验证时,需要注意它们之间的区别。@NotEmpty 只验证为空,而 @NotBlank 验证的是字符串除去空格后是否还有内容。如果字符串只包含空格,请使用 @NotBlank 验证注解。 阅读详情

相关推荐

@NotNull @NotEmpty @NotBlank java校验注解 validation

@NotNull @NotEmpty @NotBlank java校验注解 validation

global_coding的博客 9980

@NotBlank的使用以及效果

创建Controller接口,添加新增这个实体类对象的接口方法 注意在使用@NotBlank等注解时,一定要和@valid一起使用,不然@NotBlank不起作用,即参数必须添加@Valid注解,不可以缺少 启动程序,在Postman中传入参数调用此接口验证@NotBlank的作用效果 验证顺序与字段在实体类中的上下顺序一致 拓展:@NotNull:用在基本类型的包装类型上面的属性注解,不能为null,但可以为empty@NotEmpty:用在集合类上面的属性的注解,不能为null,而且长度必须大于

Aku_2020的博客 2万+

@NotEmpty和@NotBlank和@NotNull小结

@NotEmpty和@NotBlank和@NotNull小结 相同点 @NotEmpty、@NotBlank和、@NotNull都来自于包org.hibernate.validator.constraints.*下的 不同点 @NotNull:不能为null,但可以为empty,用在基本类型上 @NotEmpty:不能为null,而且长度必须大于0,用在集合类上面 @NotBlank:只能作用在String上,不能为null,而且调用trim()后,长度必须大于0 其他部分标签含义小结 项目 说明

weixin_41803760的博客 1232

@NotNull 等注解的简单使用

注册一个账号, 有账号+密码 前端会做一个判空,但是后端同时也要做一个判空,防止url直接访问 这时后端的代码通常是: if(name!=null){ return "账号不能为空,请重新输入"; } else if(password!=null){ return "密码不能为空,请重新输入"; } 这样就会显得特别low,而且极不美观 这时候就要用到一个注解@NotNull 简单举例说明: @Data public class UserInfo { @NotNull(message = "

u010925982的博客 6万+

LiveGBS流媒体平台GB/T28181实战指南:海康NVR物联网卡摄像头注册失败全链路排查与抓包技巧

本文详细解析了LiveGBS流媒体平台中海康NVR物联网卡摄像头注册失败的常见问题及解决方案。通过全链路排查与抓包技巧,包括物联网卡配置、多网卡冲突处理、防火墙设置等,帮助用户快速定位并解决GB/T28181协议下的设备注册难题,提升流媒体平台部署效率。

weixin_29290947的博客 492

ubuntu20.04安装UE4+Airsim环境

版本UE4.27+Airsim1.81

玖茸的博客 3380

@NotEmpty、@NotBlank、@NotNull的区别

在网上搜索的内容,大致如下: @NotEmpty 用在集合类上面 @NotBlank 用在String上面 @NotNull 用在基本类型上 只有简单的结果,但是再更具体一点的内容就搜不到了,所以去看了看源码,发现了如下的注释:1. @NotEmpty /** * Asserts that the annotated string, collection, ma

zZ_life的博客 6万+

SAP 零售 FMS 物料主数据(一)

SAP 零售 FMS 物料主数据(一) SAP 对于鞋服行业最新的解决方案-FMS(相当于原来的AFS+Retail);更偏向与零售; 商品主数据与原来的AFS大不相同,取消了原来的Grid的网格概念,取而代之的是变式;商品主数据维护也偏向于Retail的维护模式;事物代码也不是MM01而是MM41 /MM46; 在维护商品主数据前,需要与商品部沟通定义各种商品相关的规范如编码规则,大中小类 ,颜色库,尺码库等,此处不赘述; 创建商品需要确定哪些物料是变式物料,哪些是常规不带特性的单一物料;这决定了在创建商

weixin_45518759的博客 5061

@NotNull 和 @NotEmpty 和@NotBlank 区别

@NotNull 和 @NotEmpty  和@NotBlank 区别 如果在使用注解 @Validator的时候,出现如下错误: javax.validation.UnexpectedTypeException: No validator could be found for type: java.lang.Integer 那一定是在基本类型上使用注解出现的错误,需要注意的是: @NotN...

Hebe 1万+

ElasticSearch 集群安全加固实战:从零配置TLS证书与密码认证

本文提供了一份详尽的ElasticSearch集群安全加固实战指南,重点介绍了如何从零开始配置TLS证书与用户安全认证。通过分步讲解证书生成、节点配置、集群重启及密码设置,帮助管理员为ES集群构建通信加密与访问控制的双重防线,有效提升数据安全性与合规性。

weixin_29323493的博客 444

MTK Linux DRM分析(八)- KMS drm_crtc.c

CRTC 在 Linux DRM 子系统中是显示控制的核心,负责时序生成、模式设置和管线的调度。理解其工作原理和 API 对于进行底层图形开发、调试显示问题或 simply understanding how your graphics stack works 都至关重要。

iTom1900 1349

参数校验注解@NotNull、@NotBlank、@NotEmpty

参数校验注解简介入参测试代码总结 简介 本文只对结论做说明,不深究过程 @NotNull 可以加在所有类型上,与@NotBlack或者 @NotEmpty配合有奇效 @NotBlank 只能用于字符串 用在其他类型上会报错 @NotEmpty 只用于集合,用于其他类型会报错 探讨一下这三个注解加在字段上的作用 import org.springmodules.validation.bean.conf.loader.annotation.handler.NotBlank; import

wuhen77的博客 4569

GB 44497-2024《智能网联汽车 自动驾驶数据记录系统》标准解读

GB 44497-2024《智能网联汽车 自动驾驶数据记录系统》针对智能网联汽车的自动驾驶数据记录系统进行了全面规范。标准要求我们记录车辆在自动驾驶模式下的所有关键操作数据,如:1. 车辆状态数据,如速度、加速度、转向角度、制动状态等;2. 环境感知数据,如周围物体的位置、速度、类型等;3. 驾驶决策数据,如路径规划、避障决策、紧急制动指令等;4. 系统状态数据,如软件版本、硬件状态、系统警告信息等。在数据存储方面,标准强调了数据的安全性和可靠性。

daopuyun的博客 2669

@NotEmpty、@NotBlank、@NotNull三种注解的区别

@NotEmpty 用在集合类上面 加了@NotEmpty的String类、Collection、Map、数组,是不能为null或者长度为0的(String Collection Map的isEmpty()方法) @NotBlank只用于String,不能为null且trim()之后size&gt;0 @NotNull:不能为null,但可以为empty,没有Size的约束...

我就是我的博客 7万+

Oracle 常用语法汇总

CREATE TABLE 表名(COMMENT ON COLUMN 注释;-- 创建一个学生表STUDENT_ID NUMBER(10) PRIMARY KEY, -- 学生ID,主键FIRST_NAME VARCHAR2(50) NOT NULL, -- 学生名字,不允许为空LAST_NAME VARCHAR2(50) NOT NULL, -- 学生姓氏,不允许为空EMAIL VARCHAR2(100) UNIQUE, -- 学生电子邮箱,唯一。

拽着尾巴的鱼儿的博客 2157

ABB RobotStudio 和 S7-PLCSIM Advanced V5.0 搭建虚拟通信环境,实现 PLC 对机器人布尔量、数字量和模拟量的控制。

本教程详细介绍了如何利用ABB RobotStudio和S7-PLCSIM Advanced V5.0搭建虚拟通信环境,实现PLC对机器人的布尔量、数字量和模拟量控制。主要内容包括:在TIA Portal V20中配置PLC项目并编写通信程序;通过S7-PLCSIM Advanced创建虚拟PLC运行环境;在RobotStudio中设置机器人PROFINET通信;以及建立虚拟网络连接并进行功能测试。该方案适用于工业自动化虚拟调试,可显著降低现场调试风险。操作需注意软件版本兼容性、网络配置及信号映射准确性,最

CHUXUEZHE8210的博客 2515

Spring Boot 中@NotNull, @NotEmpty和@NotBlank

简述三者区别 @NotNull://CharSequence, Collection, Map 和 Array 对象不能是 null, 但可以是空集(size = 0)。 @NotEmpty://CharSequence, Collection, Map 和 Array 对象不能是 null 并且相关对象的 size 大于 0。 @NotBlank://String ...

大米饭 2681

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

@NotNull @NotBlank @NotEmpty 踩过的一些坑

@NotNull @NotBlank @NotEmpty 踩过的一些坑 作为一种优雅的参数校验的注解,在使用中稍微不小心就会出现一些错误.这些注解作用在VO实体类中的成员变量上. 首先导入坐标 <!-- javax.validation --> <dependency> <groupId>javax.validation</groupId> <artifactId>validation-api</artifactId>

m0_51285952的博客 1542

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

验证框中@NotEmpty、@NotBlank、@NotNull具体用法

验证框中@NotEmpty、@NotBlank、@NotNull乍一看还是容易弄混的。主要使用情况记录一下:@NotEmpty 用在集合类上面@NotBlank 用在String上面@NotNull 用在基本类型上

qq_35414502的博客 5763

Java——》@NotNull、@NotEmpty、@NotBlank

版权声明:本文为博主原创文章,无需授权即可转载,甚至无需保留以上版权声明,转载时请务必注明作者。 https://blog.youkuaiyun.com/weixin_43453386/article/details/84788317 序号 注解 对象 备注 1 @NotNull CharSequenceCollectionMapArray 只要对象不能是 null, 但可以是空集(size ...

小仙~ 3857

【@NotBlank】@NotBlank与@NotEmpty与@NotNull区别

NotBlank 专门用于String(字符串)类型的字段或参数。它的校验逻辑非常严格,要求被注解的字符串必须同时满足以下三个条件:不能为 null。不能是空字符串 “”。不能是纯空白字符(例如:" “、”\t"、“\n” 等,即去除首尾空格后长度必须大于 0)。

2402_85428625的博客 514

@NotEmpty、@NotNull、@NotBlank 的区别

@NotEmpty、@NotNull、@NotBlank 的区别 @NotEmpty 用在集合上面(不能注释枚举) @NotBlank用在String上面 @NotNull用在所有类型上面 1. @NotEmpty Asserts that the annotated string, collection, map or array is not {@code null} or empty. 加了@NotEmpty的String类,Collection、Map、数组,是不能为null或者长度为0的(Stri

qq_43380361的博客 511

@NotEmpty,@NotNull和@NotBlank的区别

@NotEmpty,@NotNull和@NotBlank的区别 1 @NotEmpty :不能为null,且Size>0 2 @NotNull:不能为null,但可以为empty,没有Size的约束 3 @NotBlank:只用于String,不能为null且trim()之后size>0 ...

1万+

@NotEmpty和@NotBlank和@NotNull

@NotEmpty、@NotBlank和、@NotNull都来自于包org.hibernate.validator.constraints.* @NotNull:不能为null,但可以为empty,用在基本类型上 @NotEmpty:不能为null,而且长度必须大于0,用在集合类上面 @NotBlank:只能作用在String上,不能为null,而且调用trim()后,长度必须大于0 注意:在使...

weixin_42590334的博客 7249

@NotNull、@NotEmpty、@NotBlank的区别

@NotEmpty用在集合类 @NotBlank 用在String @NotNull 用在基本类型 源码 @NotEmpty package javax.validation; import static java.lang.annotation.ElementType.CONSTRUCTOR; import static java.lang.annotation.ElementType.FIELD; import static java.lang.annotation.ElementType.METHO

JavaEdge全是干货的技术号 1288

Spring中@NotEmpty、@NotBlank、@NotNull 的区别和使用

Spring中@NotEmpty、@NotBlank、@NotNull 的区别和使用

【可全包】本人程序员,不需要做任何吹嘘,只是实在写点程序,写点文档,熟悉各类主流框架,SSM,SpringBoot,Flask,Djiango,Mysql,Sqlite,VUE,Uniapp等,各类程序设计专家,优质作者 918
上一篇: Spring Bean是什么?十分钟带你了解!
下一篇: 2024年Java高频面试题库总结(600+java面试真题含答案解析)
退休的汤姆
博客等级 码龄7年 1657粉丝 1051原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值