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

@NotBlank、@NotEmpty、@NotNull

@NotBlank@NotEmpty@NotNull 通常与 Bean Validation 规范(JSR 303/383) 或其实现库(如 Hibernate Validator)配合使用。这些注解用于数据校验,它们的使用逻辑与类型和业务场景相关,以下是具体原因:

总结

注解 适用类型 校验规则
@NotBlank String 非空,且不全是空白字符(如 "abc" ✅,null ❌,"" ❌," " ❌)
@NotEmpty 集合(List等) 非空,且至少有一个元素(如 [1,2] ✅,null ❌,[] ❌)
@NotNull 所有对象类型 非空(如 new Date() ✅,null ❌)

1. @NotBlank(针对 String 类型)

  • 作用:校验字符串是否 非空不全是空白字符(如空格、换行、制表符等)。
  • 适用场景:当需要确保字符串 有实际内容 时使用,例如用户名、密码、表单输入等。
  • 示例
    @NotBlank(message = "名称不能为空或空白")
    private String name;
    
  • 区别于 @NotNull@NotBlank 会先检查字符串是否为 null,然后再检查是否为空字符串或全空白字符。而 @NotNull 仅检查是否为 null,不关心内容是否为空。

2. @NotEmpty(针对 ListSetMap 等集合类型)

  • 作用:校验集合是否 非空至少包含一个元素
  • 适用场景:当需要确保集合 有实际元素 时使用,例如订单中的商品列表、用户角色列表等。
  • 示例
    @NotEmpty(message = "商品列表不能为空")
    private List<Product> products;
    
  • 区别于 @NotNull@NotEmpty 会先检查集合是否为 null,然后再检查是否为空集合(size() == 0)。而 @NotNull 仅检查是否为 null,不关心集合是否为空。

3. @NotNull(针对 Date、对象等通用类型)

  • 作用:校验对象是否 非空(即不为 null)。
  • 适用场景:当需要确保字段 存在有效值,但不关心其具体值是否“空”时使用。例如日期字段、实体对象引用等。
  • 示例
    @NotNull(message = "创建时间不能为空")
    private Date createTime;
    
  • 区别于其他注解@NotNull 是最基础的校验,仅检查对象是否为 null,不关心其内部状态(如 Date 是否是合法日期、字符串是否为空等)。

为什么针对不同类型使用不同的注解?

  • 类型特性差异
    • 字符串:需要排除全空白字符的情况(如用户输入 " ")。
    • 集合:需要确保集合中至少有一个元素(如订单必须有商品)。
    • 对象/日期:只需确保对象存在(如 Date 对象可以是过去的日期,但不能为空引用)。
  • 业务需求
    • 不同类型的数据校验规则不同。例如,一个 Date 字段可能允许任何日期值(只要不为 null),但一个 List 必须至少包含一个元素才能有意义。
http://www.vanclimg.com/news/2890.html

相关文章:

  • pid查询树形结构
  • C语言基础-随机数
  • 教育 AI 大事件!OpenAI 深夜甩出 ChatGPT Study,免费当你 24 小时私人家教
  • C语言基础-循环语句(循环结构)
  • 题解:AT_agc066_c [AGC066C] Delete AAB or BAA
  • CF2120D Matrix game 题解
  • DP - 数据结构优化
  • P1163 银行贷款-二分
  • PyTorch基础
  • Gitee Wiki重塑关键领域软件开发的知识管理范式
  • [原创]《C#高级GDI+实战:从零开发一个流程图》第08章:增加菱形、平行四边形、圆角矩形,文本居中显示
  • 题解:CF1458C Latin Square
  • 探究 AI 智能体:扣子空间的使用门槛与未来进化方向
  • CF1731D 题解
  • G. Unusual Entertainment 题解
  • centos+stress-ng+cgroup完整压力测试方案
  • 2.6 rt-thread实操 SConstruct解析
  • mac配置hdc+adb环境
  • C# Avalonia 07 - LoadFromCommandLine
  • 【译】当JavaScript擅自决定我的一天从早上9点开始
  • IPD项目管理软件对比市面上10款主流工具,哪个最值得入手?
  • C++小白修仙记_LeetCode刷题_1768交替合并字符串
  • MK_各社媒特点_2507
  • 抗体标记服务|FITC/Alexa Fluor偶联|流式细胞与ELISA应用
  • 昨天做什么
  • 第十九日
  • 关于我-About Me
  • 银河麒麟linux硬盘扩容
  • Tesla Financial Report Analysis All In One
  • 亚马逊与马普学会共建AI科学中心