spring boot参数验证注解@NotNull、@NotBlank和@NotEmpty区别

ops/2024/10/18 8:35:11/

目录

  • 前言
  • 说明
  • 举例

前言

使用spring boot参数验证是常常会使用@NotNull、@NotBlank和@NotEmpty三个判断是否不为空的注解,中文都有不能为空的意思,大部分使用者都傻傻分清它们之间到底有什么区别。今天就让咱们来一起探索它们之间的不同吧。

说明

注解名称功能
@NotNull可用于所有类型的字段,判断字段不能为null
@NotBlank只能用于String类型的字段,判断字段不能为空串或空白(空格或制表符)字符串
@NotEmpty可用于String类型和集合类型,用在String字段上时,字段不能为空串;用于集合时,集合不能为null或集合的size不为0

共同点:三个注解标注的字段都不能为null

举例

实体User.java

import lombok.Data;import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import java.util.List;/*** @Description TODO* @Author liqinglong* @DateTime 2024-04-30 11:02* @Version 1.0*/
@Data
public class User {@NotBlank(message = "姓名不为空")private String userName;@NotNull(message = "年龄不能为空")private Integer age;@NotEmpty(message = "权限列表不能空")private List<String> rolerList;
}

测试类 ValidTest.java

import com.ruoyi.common.exception.ServiceException;
import org.apache.commons.collections.CollectionUtils;import javax.validation.ConstraintViolation;
import javax.validation.Validation;
import javax.validation.Validator;
import javax.validation.ValidatorFactory;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;/*** @Description TODO* @Author liqinglong* @DateTime 2024-04-30 11:07* @Version 1.0*/
public class ValidTest {public static void main(String[] args) {// Bean 验证器ValidatorFactory vf = Validation.buildDefaultValidatorFactory();Validator validator = vf.getValidator();User user = new User();//姓名为空格或制表符user.setUserName("                      ");//年龄为nulluser.setAge(null);//权限集合的长度为0List<String> roles = new ArrayList<>();user.setRolerList(roles);// 校验的业务对象:user,Bean 类型:UserSet<ConstraintViolation<User>> checkSet = validator.validate(user);if (CollectionUtils.isNotEmpty(checkSet)) {// Bean验证不通过throw new ServiceException(checkSet.stream().map(ConstraintViolation::getMessage).collect(Collectors.joining(",")));}}
}

运行结果:
在这里插入图片描述
其它各种情况,请同学自行测试,测试得出的结论欢迎到评论区留言。


http://www.ppmy.cn/ops/39223.html

相关文章

【敦煌网注册/登录安全分析报告】

敦煌网注册/登录安全分析报告 前言 由于网站注册入口容易被黑客攻击&#xff0c;存在如下安全问题&#xff1a; 暴力破解密码&#xff0c;造成用户信息泄露短信盗刷的安全问题&#xff0c;影响业务及导致用户投诉带来经济损失&#xff0c;尤其是后付费客户&#xff0c;风险巨大…

axios配置 responseType: “blob“

在使用 Axios 进行网络请求时&#xff0c;配置 responseType: "blob" 是用来指示 Axios 将响应体作为 Blob 对象处理。这在文件下载功能中特别有用&#xff0c;因为 Blob 对象可以被用来创建一个指向该文件内容的 URL&#xff0c;进而触发浏览器的下载行为或者在页面…

【Excel VBA】深入探索VBScript中的Choose函数

深入探索VBScript中的Choose函数 在编程实践中&#xff0c;我们会遇到大量的If……ElseIf……搞得代码异常的庞大。 今天有个VBA的学生&#xff0c;突然问田辛老师有没有好的办法。 于是&#xff0c; 田辛老师发现还真有办法。 也就是Choose函数。Choose函数可以来优化代码逻辑…

第 8 章 机器人底盘Arduino端入口(自学二刷笔记)

重要参考&#xff1a; 课程链接:https://www.bilibili.com/video/BV1Ci4y1L7ZZ 讲义链接:Introduction Autolabor-ROS机器人入门课程《ROS理论与实践》零基础教程 8.4.2 底盘实现_01Arduino端入口 ros_arduino_bridge/ros_arduino_firmware/src/libraries/ROSArduinoBridge…

Spring AOP浅谈

什么是AOP&#xff1f; AOP是Aspect-Oriented Programming的缩写&#xff0c;是一种面向切面的编程方法。 在AOP中&#xff0c;一个切面是一组可以独立于其他代码执行的功能&#xff0c;如日志记录、安全性检查、事务处理等。这些功能通常被称为"通知"&#xff0c;并…

学习java第六十六天

Spring 中的 bean 的作用域有哪些? singleton : 唯一 bean 实例&#xff0c;Spring 中的 bean 默认都是单例的。 prototype : 每次请求都会创建一个新的 bean 实例。 request : 每一次HTTP请求都会产生一个新的bean&#xff0c;该bean仅在当前HTTP request内有效。 sessio…

学习心得:如何开始学习一款MCU

一、MCU简介 任何一款MCU&#xff0c;其基本原理和功能都是大同小异&#xff0c;所不同的只是其外围功能模块的配置及数量、指令系统等。对于指令系统&#xff0c;虽然形式上看似千差万别&#xff0c;但实际上只是符号的不同&#xff0c;其所代表的含义、所要完成的功能和寻址…

Excel——项目管理,设置时间到期自动提醒及颜色高亮

效果图 第一步、自动获取合同到期日期 1、首先合同【签约日期】和【到期日期】下面的数据必须是日期格式&#xff0c;不能是其它的格式否则无法计算&#xff0c;如果是其它格式需要转换成标准的日期格式&#xff0c;如下图所示。 2、在“到期日期”下面的第一个单元格中输入公…