当前位置: 首页 > news >正文

Java Bean Validation 注解:@NotEmpty、@NotBlank 和 @NotNull 的区别

1. 概述

Bean Validation 是 Java 提供的一种对 Java Bean 实例的字段或方法参数进行校验的标准机制。它允许开发者使用注解的方式定义验证逻辑,这些注解可以在类、字段或者方法上声明,并且可以被任何实现了 JSR 303/JSR 349 规范的框架(如 Hibernate Validator)所识别和执行。

2. @NotNull
  • 含义:该注解用于检查一个字段或参数是否为 null。如果字段不是 null,则通过验证。
  • 适用范围
    • 可以应用于任何类型的字段或方法参数。
  • 示例代码
    public class User {@NotNull(message = "Name cannot be null")private String name;// Getter and Setter methods...
    }
    
3. @NotEmpty
  • 含义:该注解用于检查一个字符串或集合类型(如 List, Set, Map)是否为空。对于字符串,它检查是否为 null 或长度为 0;对于集合类型,它检查是否为 null 或大小为 0。
  • 适用范围
    • 只能应用于字符串和集合类型的字段或方法参数。
  • 示例代码
    public class User {@NotEmpty(message = "Email cannot be empty")private String email;// Getter and Setter methods...
    }
    
4. @NotBlank
  • 含义:该注解用于检查一个字符串是否为 null 或仅由空白字符组成(即长度为 0 或只包含空格、制表符等)。如果字符串非空且含有非空白字符,则通过验证。
  • 适用范围
    • 只能应用于字符串类型的字段或方法参数。
  • 示例代码
    public class User {@NotBlank(message = "Password cannot be blank")private String password;// Getter and Setter methods...
    }
    
5. 总结
  • @NotNull:检查任何类型的对象是否为 null
  • @NotEmpty:检查字符串或集合类型的对象是否为 null 或为空。
  • @NotBlank:检查字符串是否为 null 或仅由空白字符组成。
6. 使用建议
  • 当需要验证对象不为 null 时,使用 @NotNull
  • 需要确保字符串或集合类型非空时,使用 @NotEmpty
  • 如果需要确保字符串不仅非空而且含有非空白字符时,使用 @NotBlank

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 笔面试编程题总结
  • 详解pd.pivot_table
  • 计算机网络——网络层(多协议标签交换MPLS、软件定义网络SDN)
  • SQL Server端口设置完整详细步骤
  • 900565Z error Failed opening bolt
  • C# 设计模式之装饰器模式
  • 在Linux中宏观的看待线程
  • leetcode17. 电话号码的字母组合,dfs深度优先搜索
  • JC/T 2436-2018 木塑家具板材检测
  • Java 中的 ArrayList 和 LinkedList 在性能上有什么不同?
  • Linux安装Java(JKD)
  • 边缘计算×AI:绘制未来实时智能的宏伟蓝图
  • 智能化的Facebook未来:AI如何重塑社交网络的面貌?
  • Docker-数据卷指令
  • 使用ThreadStatic属性提供线程安全的数据访问
  • DataBase in Android
  • JavaScript DOM 10 - 滚动
  • JavaScript 事件——“事件类型”中“HTML5事件”的注意要点
  • JavaScript对象详解
  • JS专题之继承
  • laravel 用artisan创建自己的模板
  • Linux CTF 逆向入门
  • Redash本地开发环境搭建
  • Solarized Scheme
  • SpringCloud(第 039 篇)链接Mysql数据库,通过JpaRepository编写数据库访问
  • TypeScript迭代器
  • webpack4 一点通
  • 从@property说起(二)当我们写下@property (nonatomic, weak) id obj时,我们究竟写了什么...
  • 基于OpenResty的Lua Web框架lor0.0.2预览版发布
  • 前端代码风格自动化系列(二)之Commitlint
  • 前端面试之CSS3新特性
  • 前端之React实战:创建跨平台的项目架构
  • 浅谈web中前端模板引擎的使用
  • 使用Maven插件构建SpringBoot项目,生成Docker镜像push到DockerHub上
  • 用Visual Studio开发以太坊智能合约
  • ​猴子吃桃问题:每天都吃了前一天剩下的一半多一个。
  • ​香农与信息论三大定律
  • #!/usr/bin/python与#!/usr/bin/env python的区别
  • #{}和${}的区别?
  • $(selector).each()和$.each()的区别
  • $LayoutParams cannot be cast to android.widget.RelativeLayout$LayoutParams
  • (+3)1.3敏捷宣言与敏捷过程的特点
  • (10)ATF MMU转换表
  • (6) 深入探索Python-Pandas库的核心数据结构:DataFrame全面解析
  • (day6) 319. 灯泡开关
  • (vue)页面文件上传获取:action地址
  • (蓝桥杯每日一题)love
  • (六) ES6 新特性 —— 迭代器(iterator)
  • (三)Pytorch快速搭建卷积神经网络模型实现手写数字识别(代码+详细注解)
  • (三)SvelteKit教程:layout 文件
  • (贪心) LeetCode 45. 跳跃游戏 II
  • (提供数据集下载)基于大语言模型LangChain与ChatGLM3-6B本地知识库调优:数据集优化、参数调整、Prompt提示词优化实战
  • (一)python发送HTTP 请求的两种方式(get和post )
  • (一)模式识别——基于SVM的道路分割实验(附资源)
  • (自用)gtest单元测试