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

@NotNull、@NotBlank 和 @NotEmpty 注解的区别

在Java的Bean Validation(JSR 303/380)规范中,@NotNull、@NotBlank和@NotEmpty是用于验证字段或属性是否满足特定非空条件的注解。虽然它们的目标相似,但它们在细节上有所不同。下面是对这三个注解的详细解释和比较。

1. @NotNull

  • 来源: javax.validation.constraints.NotNull
  • 用途: 用于验证基本类型对象(int、long等)或对象引用(如String、List等)不是null
  • 适用范围: 字段、方法、参数上。
  • 示例: 确保一个用户对象在保存之前其名字不是null
    public class User {
        @NotNull
        private String name;
    }
    

如果namenull,那么在验证时将会抛出异常。

2. @NotBlank

  • 来源: org.hibernate.validator.constraints.NotBlank
  • 用途: 用于验证字符串不是null且trim()之后长度大于0,即字符串不是空字符串也不是只包含空白字符的字符串。
  • 适用范围: 只能用于字符串类型的字段上。
  • 示例: 确保表单提交的用户名不是空白字符串。
    public class User {
        @NotBlank
        private String username;
    }
    

如果usernamenull、空字符串或者只包含空格,验证将会失败。

3. @NotEmpty

  • 来源: javax.validation.constraints.NotEmpty
  • 用途: 用于集合(Collection、Map、数组等)不是null且size大于0,即集合不为空。
  • 适用范围: 用于集合类型的字段上。
  • 示例: 确保用户拥有的角色列表不为空。
    public class User {
        @NotEmpty
        private List<Role> roles;
    }
    

如果rolesnull或者列表中没有元素,验证将会失败。

4.总结区别

  • @NotNull: 确保对象不是null,但不检查空字符串或集合的空性。
  • @NotBlank: 确保字符串不是null,并且去除前后的空白字符后至少包含一个字符。
  • @NotEmpty: 确保集合不是null,并且至少包含一个元素。
    在这里插入图片描述

5.使用注意事项

  • 使用这些注解时,通常需要与验证框架如Hibernate Validator配合使用。
  • 这些注解通常用于服务层或持久层之前的数据校验。
  • 根据不同的业务需求选择合适的注解,比如对于用户输入的字符串应该使用@NotBlank,而对于用户角色列表则应该使用@NotEmpty
  • 在定义实体类或者DTOs时,合理使用这些注解可以提高代码的健壮性。

6.选择注解的建议

  • 如果您只需要确保字段或属性不为null,请使用@NotNull。
  • 如果您需要确保字符串字段或属性不仅不为null,而且包含非空白字符,请使用@NotBlank。
  • 如果您需要确保集合、数组或字符串字段或属性不仅不为null,而且不为空(对于字符串,只检查是否为空字符串),请使用@NotEmpty。

http://www.kler.cn/a/506545.html

相关文章:

  • 工业过程自动化技术:控制系统、传感器、互联网、AI通信
  • Excel 技巧10 - 如何检查输入重复数据(★★)
  • [Qt]常用控件介绍-容器类控件-QGroupBox、QTabWidget
  • Bootstrap UI 编辑器
  • vue3里面,事件触发一次,方法执行多次
  • 通过ssh连接debian
  • Redis :redis的大Key问题
  • 复盘思维课程
  • Spring MVC核心组件与请求处理流程
  • BertTokenizerFast 和 BertTokenizer 的区别
  • 探索 AI 自动化编程:效率革命与未来教育的转型
  • Java 对象池管理的高性能工具库 Apache Commons Pool 2
  • 2.两数相加--力扣
  • tomcat文件目录讲解
  • 剑指Offer|LCR 031. LRU 缓存
  • Haskell语言的网络编程
  • 基于 Electron 应用的安全测试基础 — 提取和分析 .asar 文件
  • 【k8s面试题2025】1、练气期
  • 鸿蒙-点击Notification通知并打开App的具体页面
  • 动态规划汇总1