实际上关于参数校验我们经常会遇到@NotNull,@NotEmpty和@NotBlank,几乎涉及到校验的工具包都会有它们的身影不管是Hibernate工具包还是Apache的校验工具包或者其他常用的工具包都会出现,有时候感觉这几个是差不多可以互相替换的。那他们具体的使用场景和区别是什么呢?

一 校验要求

NotNull

NotNull不能为null,但可以为empty,没有Size的约束,比如说

ArrayList list = new ArrayList();

这个list它不是null但size为0,它是可以通过校验的
NotNull的源码

@Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER, TYPE_USE })
@Retention(RUNTIME)
@Repeatable(List.class)
@Documented
@Constraint(validatedBy = { })
public @interface NotNull {String message() default "{javax.validation.constraints.NotNull.message}";Class<?>[] groups() default { };Class<? extends Payload>[] payload() default { };/*** Defines several {@link NotNull} annotations on the same element.** @see javax.validation.constraints.NotNull*/@Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER, TYPE_USE })@Retention(RUNTIME)@Documented@interface List {NotNull[] value();}
}

NotEmpty

NotEmpty实际上 要比NotNull限制的严格一点,就是不仅不是null,长度为0的也不可以
范围:String类,Collection、Map、数组,是不能为null或者长度为0的(String、Collection、Map
的isEmpth()方法)
实际上我们可以通过源码的注释既能看到范围(CharSequence,Collection,Map,Array)
以下是Apache的源码


/*** The annotated element must not be {@code null} nor empty. Supported types are:* <ul>* <li>{@code CharSequence} (length of character sequence is evaluated)</li>* <li>{@code Collection} (collection size is evaluated)</li>* <li>{@code Map} (map size is evaluated)</li>* <li>Array (array length is evaluated)</li>* </ul>** @author Emmanuel Bernard* @author Hardy Ferentschik** @since 2.0*/
@Documented
@Constraint(validatedBy = { })
@Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER, TYPE_USE })
@Retention(RUNTIME)
@Repeatable(List.class)
public @interface NotEmpty {String message() default "{javax.validation.constraints.NotEmpty.message}";Class<?>[] groups() default { };Class<? extends Payload>[] payload() default { };/*** Defines several {@code @NotEmpty} constraints on the same element.** @see NotEmpty*/@Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER, TYPE_USE })@Retention(RUNTIME)@Documentedpublic @interface List {NotEmpty[] value();}
}

NotBlank
NotBlank要求的要比NotEmpty跟严格一些但是校验的范围也要更窄一些,只能限定String,所以不要在集合上数组类型的参数添加@NotBlank校验。

NotBlank只用于String,不能为null且trim()之后size>0

@NotNull,@NotEmpty和@NotBlank使用和区别相关推荐

  1. @NotNull, @NotEmpty和@NotBlank之间的区别及示例

    三者之间的区别 `@NotNull:` CharSequence, Collection, Map 和 Array 对象不能是 null, 但可以是空集(size = 0). `@NotEmpty:` ...

  2. Spring Boot req中@NotNull, @NotEmpty和@NotBlank之间的区别是什么?

    简述三者区别 @NotNull://CharSequence, Collection, Map 和 Array 对象不能是 null, 但可以是空集(size = 0). @NotEmpty://Ch ...

  3. @NotNull, @NotEmpty和@NotBlank之间的区别是什么?

    首先是简要描述: [java] view plain copy print ? @NotNull://CharSequence, Collection, Map 和 Array 对象不能是 null, ...

  4. 【Java用法】@NotEmpty、@NotBlank、@NotNull注解的使用方法与区别

    以下三个注解均是 javax.validation.constraints 包下的,用于属性上的: @NotEmpty.@NotBlank.@NotNull三种注解的区别 @NotEmpty:用在集合 ...

  5. 常用校验注解@NotEmpty,@NotBlank,@NotNull,@Valid,@Validated用法区别,以及搭配 BindingResult使用,嵌套验证等《使用|CSDN创作打卡》

    文章目录 一.常用注解@NotEmpty,@NotBlank,@NotNull介绍 二.@Valid与@Validated的使用与区别 2.1@Valid与@Validated区别: 2.2嵌套验证 ...

  6. @NotNull、@NotEmpty和@NotBlank的区别

    @NotNull.@NotEmpty和@NotBlank的区别 @NotNull 不能为null,但可以为empty,没有Size的约束. @NotBlank 只能用于String,不能为空且trim ...

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

    1:引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>sp ...

  8. notempty注解属于哪个依赖_Spring注解 @NotBlank,@NotNull,@NotEmpty三者之间的区别

    简述三者区别 @NotNull://CharSequence, Collection, Map 和 Array 对象不能是 null, 但可以是空集(size = 0). @NotEmpty://Ch ...

  9. @NotNull和@NotEmpty和@NotBlank区别

    1.@NotNull:不能为null,但可以为empty (""," "," ") 2.@NotEmpty:不能为null,而且长度必须大于 ...

最新文章

  1. 【SpringMVC】概述
  2. 深入理解乐观锁与悲观锁
  3. 11. mysql锁机制_深入探讨MySQL锁机制
  4. lecture3-线性神经元和算法
  5. Mysql+Heartbeat+Drbd生产环境高可用部署若干问题解惑
  6. 二维列表的len_基于Voronoi二维多晶体的衍生脚本操作
  7. 数字信号处理——DFT的一些理解
  8. tomcat xjar 加密_XJar Spring Boot JAR 安全加密运行工具
  9. linux 终端 画圆,Linux Bash Shell快速入门
  10. MTK:socket通信
  11. C++基础:造成多态性的原因是什么?
  12. mysql表的默认所有者_MySQL数据库基本管理-001
  13. DPDK X710 DDP PPPoE 实践
  14. MATLAB拟合函数使用说明
  15. linux 基准测试,技术|如何基准测试 Linux PC 的性能?
  16. 20190603复盘
  17. 时间、日期的一些用法
  18. 126篇殿堂级深度学习论文分类整理,从入门到应用
  19. PLSql连接Oracle时提示TNS:无监听程序的解决方法
  20. 关于pr扩展是灰色的问题

热门文章

  1. 无法被计算机取代的工作,机器人无法取代的职业有哪些
  2. 计算机网络设备 ppt,计算机网络基础-计算机网络硬件设备.ppt
  3. android按钮好看的样式
  4. 父子组件通信,父类调用子类方法
  5. 1000套物联网 电子 电气毕业设计论文及相关学习资料
  6. win10系统cmd模式下输入python弹出Windows应用商店 解决方法
  7. 基于SSM的在线书城网站【附源码】
  8. 控制PowerPoint课件中Flash歌曲的播放
  9. windows_网络重置_重置网络_命令
  10. 2k系列服务器年数,《NBA 2K19》国行版尝鲜 稳定的服务器体验太棒了