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

news2024/11/19 19:45:48

目录

  • 前言
  • 说明
  • 举例

前言

使用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("                      ");
        //年龄为null
        user.setAge(null);
        //权限集合的长度为0
        List<String> roles = new ArrayList<>();
        user.setRolerList(roles);
        // 校验的业务对象:user,Bean 类型:User
        Set<ConstraintViolation<User>> checkSet = validator.validate(user);
        if (CollectionUtils.isNotEmpty(checkSet)) {
            // Bean验证不通过
            throw new ServiceException(checkSet.stream().map(ConstraintViolation::getMessage).collect(Collectors.joining(",")));
        }
    }
}

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1661899.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

一文了解webpack和vite中Tree-Shaking

1、什么是Tree-Shaking 1.1 摇树优化&#xff08;Tree Shaking&#xff09;是Webpack中一种用于优化JavaScript代码的技术。它的目标是通过静态分析&#xff0c;从代码中剔除未被使用的模块&#xff0c;从而减少最终打包文件的大小。 1.2 Tree-shaking 它的名字来源于通过摇晃…

【线性代数】英语版听课笔记

线性代数 - 北京航天航空大学&#xff08;英文版&#xff09;_哔哩哔哩_bilibili 39.concept of vector space in this lecture we will studyvector space&#xff0c; the concept of basis dimension and coordinates 向量空间的维数&#xff1a;向量空间的基底所含向量的…

在 Ubuntu系统中,可以使用以下几种方法查看网络速率

1 使用终端命令&#xff1a;可以使用ifconfig命令查看网络接口的信息&#xff0c;包括网络接口名称、IP地址、子网掩码等。也可以使用nload命令查看网络流量和传输速率。 2 使用网络监控工具&#xff1a;例如nethogs&#xff0c;可以更加直观地查看网络吞吐量。 3 使用网络测…

*****水上飞机:继承,虚函数,虚继承

一题目 请设计以下航行器、飞机、船、水上飞机等 4 个类。 CRAFT 为航行器类&#xff0c;是公共基类&#xff0c;提供航行器的基本特性。包括&#xff1a; 一个保护数据成员&#xff1a;speed(速度)。 三个公有成员函数&#xff1a;构造函数(初始化速度)、析构函数和 Show 函数…

量化交易基础知识

目录 1 什么是量化交易2 谁可以成为一个量化交易员3 量化交易的优势与特点4 量化交易员的成长之路 1 什么是量化交易 量化交易也称算法交易&#xff0c;是一种严格按照计算机算法进行买卖证券决策的交易方式。更具体一点解释就是&#xff0c;量化交易利用数学模型、统计分析和计…

Ansys界面设计:ACT入门

目录 Introduction What is customization? What is extensibility? What is ACT? What capabilities does ACT provide? What skills are required for using ACT? How do I begin using ACT? Where can I find published ACT apps? Introduction 来自官方帮助…

软件开发故事 - 我对 CTO 撒谎并挽救了项目

原文&#xff1a;GrumpyOldDev - 2024.04.18 这是几年前的事情了。还记得在我职业生涯的初期&#xff0c;父亲曾告诉我&#xff0c;做好工作往往意味着要在上司的阻碍下做好需要做的事情。他的意思是&#xff0c;你可以让上司成功并感到快乐&#xff1b;也可以让上司做每一个决…

window10设置静态IP

右键桌面网络图标 点击属性 点击要查看的网络 点击详细信息 获得网络连接详细信息 右键WiFi符号 或者其他方式进入网络与internet中心 点击 WLAN 点击属性 点击编辑&#xff08;点击一个即可&#xff09; 选择手动将刚才的信息方进入即可 完成

20232801 2023-2024-2 《网络攻防实践》实践九报告

20232801 2023-2024-2 《网络攻防实践》实践九报告 1.实践内容 &#xff08;1&#xff09;手工修改可执行文件&#xff0c;改变程序执行流程&#xff0c;直接跳转到getShell函数。 &#xff08;2&#xff09;利用foo函数的Bof漏洞&#xff0c;构造一个攻击输入字符串&#xf…

差速机器人模型LQR 控制仿真(c++ opencv显示)

1 差速机器人状态方程构建 1.1差速机器人运动学模型 1.2模型线性化 1.3模型离散化 2离散LQR迭代计算 注意1&#xff1a;P值的初值为Q。见链接中的&#xff1a; 注意2&#xff1a;Q, R参数调节 注意3&#xff1a;LQR一般只做横向控制&#xff0c;不做纵向控制。LQR输出的速度…

视频号音乐怎么下载

音乐&#xff0c;那个能够触动灵魂的艺术形式&#xff0c;穿越屏幕&#xff0c;流淌在视频号的每一个角落。然而&#xff0c;有时候&#xff0c;我们更希望能将那些动人心弦的旋律保存下来&#xff0c;让它们成为我们日常生活的一部分&#xff0c;陪伴我们度过每一个动人瞬间。…

SAM轻量化应用Auto-SAM、Group-Mix SAM、RAP-SAM、STLM

1. Auto SAM&#xff08;Auto-Prompting SAM for Mobile Friendly 3D Medical Image Segmentation&#xff09; 1.1 面临问题 医学背景&#xff1a; &#xff08;1&#xff09;与自然图像相比&#xff0c;医学图像的尺寸更小&#xff0c;形状不规则&#xff0c;对比度更低。&…

【Qt 开发基础体系】QMap 类和 QHash 类以及 QVector 类

文章目录 1.QMap 详解1.1 QMap 的介绍1.2 QMap 的具体用法如下1.3 QmultiMap类 2.QHash 详解3. QMap 和 QHash 的对比4. QVector 详解 1.QMap 详解 1.1 QMap 的介绍 &#x1f427;① QMap<key,T>提供一个从类型为Key的键到类型为T的值的映射。通常&#xff0c;QMap存储的…

使用torch完成多卡训练

最近在学detr&#xff0c;顺便学了一下多卡训模型&#xff0c;它的源码写的非常不错&#xff01; 我自己在detr的代码的基础上实现了一个vae的训练&#xff0c;在mnist数据集上&#xff0c;4张2080上&#xff0c;batch size开到1024&#xff0c;训练快到飞起。 总结一下多卡训…

JUC下的CompletableFuture详解

详细介绍 CompletableFuture是Java 8引入的一个实现Future接口的类&#xff0c;它代表一个异步计算的结果。与传统的Future相比&#xff0c;CompletableFuture提供了更丰富的功能&#xff0c;比如链式调用、组合异步操作、转换结果、异常处理等&#xff0c;极大地增强了Java在…

力扣HOT100 - 739. 每日温度

解题思路&#xff1a; 单调栈 class Solution {public int[] dailyTemperatures(int[] temperatures) {int length temperatures.length;int[] ans new int[length];Deque<Integer> stack new LinkedList<>();for (int i 0; i < length; i) {int temperatu…

TCP超时重传机制

一、TCP超时重传机制简介 TCP超时重传机制是指当发送端发送数据后&#xff0c;如果在一定时间内未收到接收端的确认应答&#xff0c;则会认为数据丢失或损坏&#xff0c;从而触发重传机制。发送端会重新发送数据&#xff0c;并等待确认应答。如果在多次重传后仍未收到确认应答&…

VMware Workstation 17 Player 创建虚拟机教程

本教程是以windows server 2012物理机服务器安装好的VMware Workstation 17 Player为例进行演示&#xff0c;安装VMware Workstation 17 Player大家可以自行网上搜索安装。 1、新建虚拟机 双击安装好的VMvare图标&#xff0c;点击创建虚拟机。 2、选择是否安装系统 本步骤选…

复习了好久的软考中项,现在上半年不考了,该怎么办?

如果有更多学习时间的话&#xff0c;可以考虑报考高级职称&#xff0c;因为高级和中级职称的很多知识点有重叠&#xff0c;只需要再复习一下相关论文就可以了。 从2024年下半年开始&#xff0c;集成考试将采用最新版教材和大纲&#xff0c;与高级职称的新版教材内容相似度很高…

Spring框架学习笔记(二):Spring IOC容器配置 Bean,分别基于XML配置bean 和 基于注解配置 bean

1 Spring 配置/管理 bean 介绍 Bean 管理包括两方面 &#xff1a;创建 bean 对象&#xff1b;给 bean 注入属性 Bean 配置方式&#xff1a;基于 xml 文件配置方式&#xff1b;基于注解方式 2 基于 XML 配置 bean 2.1 通过类型来获取 bean 方法&#xff1a;给getBean传入一…