>>分享流行的Java框架以及开源软件,对孙卫琴的《精通Spring》、《Spring Cloud Alibaba微服务开发零基础入门到实操》提供技术支持 书籍支持  卫琴直播  品书摘要  在线测试  资源下载  联系我们
发表一个新主题 开启一个新投票 回复文章 您是本文章第 27375 个阅读者 刷新本主题
 * 贴子主题:  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面向对象编程-->Lambda表达式
  JavaWeb开发-->JSP技术详解(Ⅰ)
  JSP与Hibernate开发-->通过JPA API检索数据
  Java网络编程-->用Spring整合CXF发布Web服务
  精通Spring-->创建综合购物网站应用
  Vue3开发-->Vue简介
  Netty权威指南:I/O 多路复用技术
  面试官问什么是Spring循环依赖,该如何回答?
  Mybatis Plus 多租户架构(Multi-tenancy)实现
  Spring API中JAVA反射—工具类ReflectionUtils
  Spring MVC异常处理机制
  HandlerInterceptor与WebRequestInterceptor的异同
  重新理解响应式编程
  @SessionAttribute和@SessionAttributes的区别
  Redis solr一二事 - 在spring中使用jedis 连接调试单机redi...
  Redis的漏洞利用,原来大佬都是这样操作的
  Spring Cloud与Dubbo的完美融合之手「Spring Cloud Alibaba
  Spring Cloud 技术栈及架构一览
  spring-boot-plus V1.4.0发布 集成用户角色权限部门管理 - g...
  Axis、Axis2和CXF比较
  spring整合WebService入门详解
  更多...
 IPIP: 已设置保密
楼主      
1页 0条记录 当前第1
发表一个新主题 开启一个新投票 回复文章


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