>>分享流行的Java框架以及开源软件,对孙卫琴的《精通Spring:Java Web开发技术详解》提供技术支持 书籍支持  卫琴直播  品书摘要  在线测试  资源下载  联系我们
发表一个新主题 开启一个新投票 回复文章 您是本文章第 18875 个阅读者 刷新本主题
 * 贴子主题:  Spring数据验证 中@NotNull, @NotEmpty和@NotBlank之间的区别 回复文章 点赞(0)  收藏  
作者:flybird    发表时间:2020-07-13 12:04:05     消息  查看  搜索  好友  邮件  复制  引用

Spring数据验证 中@NotNull, @NotEmpty和@NotBlank之间的区别

示例:
String name = null;
@NotNull: false
@NotEmpty: false
@NotBlank: false

String name = "";
@NotNull: true
@NotEmpty: false
@NotBlank: false

String name = " ";
@NotNull: true
@NotEmpty: true
@NotBlank: false

String name = "Great answer!";
@NotNull: true
@NotEmpty: true
@NotBlank: true

  


简述三者区别

@NotNull://CharSequence, Collection, Map 和 Array 对象不能是 null, 但可以是空集(size = 0)。
@NotEmpty://CharSequence, Collection, Map 和 Array 对象不能是 null 并且相关对象的 size 大于 0。
@NotBlank://String 不能是 null 且去除两端空白字符后的长度(trimmed length)大于 0。
  
注解的定义(在version 4.1中):
1、@NotNull:
定义如下:
@Constraint(validatedBy = {NotNullValidator.class})
这个类中有一个isValid方法是这么定义的:

public boolean isValid(Object object, ConstraintValidatorContext constraintValidatorContext) {
return object != null;  
}

对象不是null就行,其他的不保证。

2、@NotEmpty:
定义如下:
@NotNull  
@Size(min = 1)    

也就是说,@NotEmpty除了@NotNull之外还需要保证@Size(min=1),这也是一个注解,这里规定最小长度等于1,也就是类似于集合非空。

3、@NotBlank:
@NotNull  
@Constraint(validatedBy = {NotBlankValidator.class})   
类似地,除了@NotNull之外,还有一个类的限定,这个类也有isValid方法:

if ( charSequence == null ) {  //curious  
  return true;    
}    
return charSequence.toString().trim().length() > 0;

  

有意思的是,当一个string对象是null时方法返回true,但是当且仅当它的trimmed length等于零时返回false。即使当string是null时该方法返回true,但是由于@NotBlank还包含了@NotNull,所以@NotBlank要求string不为null。
  




程序猿的技术大观园:www.javathinker.net
  Java面向对象编程-->流程控制
  JavaWeb开发-->JSP技术详解(Ⅱ)
  JSP与Hibernate开发-->通过JPA API检索数据
  Java网络编程-->客户端协议处理框架
  精通Spring-->Vue Router路由管理器
  Vue3开发-->计算属性和数据监听
  git 常用指令总结
  9种设计模式在Spring中的运用,一定要非常熟练!
  重新理解响应式编程
  Spring AOP的基本概念和注解
  Spring MVC异常处理机制
  @Resource注解的用法
  @SessionAttributes的用法
  SpringCloud Gateway-整体流程
  如何实现Git服务间同步
  中央厨房订单管理系统,引入ActiveMQ消息队列,平滑处理高峰...
  【Web服务开发】基于Java开发代驾定位系统,2天完成脚手架
  mybatis-plus 注解实现多表关联查询的最佳实践
  Spring MVC Controller单例陷阱
  Spring入门基础知识
  RESTful 架构详解
  更多...
 IPIP: 已设置保密
楼主      
1页 0条记录 当前第1
发表一个新主题 开启一个新投票 回复文章


中文版权所有: JavaThinker技术网站 Copyright 2016-2026 沪ICP备16029593号-2
荟萃Java程序员智慧的结晶,分享交流Java前沿技术。  联系我们
如有技术文章涉及侵权,请与本站管理员联系。