>>分享流行的Java框架以及开源软件,对孙卫琴的《精通Spring》、《Spring Cloud Alibaba微服务开发零基础入门到实操》提供技术支持 书籍支持  卫琴直播  品书摘要  在线测试  资源下载  联系我们
发表一个新主题 开启一个新投票 回复文章 您是本文章第 24544 个阅读者 刷新本主题
 * 贴子主题:  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开发-->映射组成关系
  Java网络编程-->Socket用法详解
  精通Spring-->通过Vuex进行状态管理
  Vue3开发-->通过Vuex进行状态管理
  Spring Boot 入门,用 Spring Boot 写第一个 HelloWorld 程序
  Redis为什么单线程能够支持高并发
  MyBatis+Spring 事务管理
  如何编写优雅的Spring架构API
  循序渐进,阿里架构师看完都赞叹的Redis分布式锁原理分析
  SpringMVC下的JUnit4单元测试
  WebFlux 响应式编程初体验
  Spring MVC服务器端推送的两种方式
  Spring MVC SSE服务器端推送
  SpringMVC 中 @ControllerAdvice 注解的三种使用场景!
  RESTful架构和RESTful API设计总结
  如何实现Git服务间同步
  Java软件架构设计七大原则
  Spring Security中使用的责任链模式
  微架构 springcloud-07. springboot-静态资源处理
  更多...
 IPIP: 已设置保密
楼主      
1页 0条记录 当前第1
发表一个新主题 开启一个新投票 回复文章


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