Spring 中 @NotEmpty、@NotBlank、@NotNull,傻傻分不清楚!

news2024/11/20 13:33:00

1、引入依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <version>2.0.5.RELEASE</version>
</dependency>

@NotEmpty、@NotBlank、@NotNull 包的位置:import javax.validation.constraints.*;

2、区别

@NotNull
适用于基本数据类型(Integer,Long,Double等等),当 @NotNull 注解被使用在 String 类型的数据上,则表示该数据不能为 Null(但是可以为 Empty)

注:被其标注的字段可以使用 @size、@Max、@Min 对字段数值进行大小的控制

@NotBlank
适用于 String 类型的数据上,加了@NotBlank 注解的参数不能为 Null 且 trim() 之后 size > 0,必须有实际字符

@NotEmpty
适用于 String、Collection集合、Map、数组等等,加了@NotEmpty 注解的参数不能为 Null 或者 长度为 0

3、使用方法

@Data
public class BigPeople {
    @ApiModelProperty(value = "id" ,required = true)
    @NotNull(message = "id不能为空")
    @Length(message = "id不能超过{max}个长度",max = 10)
    private Integer id;
 
    @ApiModelProperty(value = "name" ,required = true)
    @NotBlank(message = "name不能为空")
    @Size(message = "名字最长为{max} 个字",max = 10)
    private String name;
 
    @ApiModelProperty(value = "age" ,required = true)
    @NotNull(message = "id不能为空")
    @Range(message = "age的长度范围为{min}岁到{max}岁之间",min = 5,max = 10)
    private Integer age;
 
    @ApiModelProperty(value = "treeNode" ,required = true)
    @NotEmpty(message = "treeNode不能为空")
    private List<String> treeNode;
    
}

@Valid 包位置:

import javax.validation.Valid;

@Validated 包的位置

import org.springframework.validation.annotation.Validated;
@ApiOperation(value = "新增或者修改一个人的信息")
@PostMapping("/updateOrInsert")
public Result updateOrInsert(@Valid @RequestBody  Person person){
    Boolean updateOrInsert = personService.updateOrInsert(person);
    if (updateOrInsert) {
        return new Result(ResultCode.SUCCESS,updateOrInsert);
    }
   return new Result(ResultCode.ERROR, "新增或者修改一个人的信息失败");
}

@ApiOperation(value = "新增或者修改一个人的信息")
@PostMapping("/updateOrInsert")
public Result updateOrInsert(@Validated @RequestBody  Person person){
    Boolean updateOrInsert = personService.updateOrInsert(person);
    if (updateOrInsert) {
        return new Result(ResultCode.SUCCESS,updateOrInsert);
    }
   return new Result(ResultCode.ERROR, "新增或者修改一个人的信息失败");
}

最上面三个注释:必须需要搭配@Valid 或者@Validated使用,在检验Controller的入参是否符合规范时。

@Valid 和 @Validated 比较

最后我们来对 @Valid 和 @Validated 两个注解进行总结下:

1:@Valid 和 @Validated 两者都可以对数据进行校验,待校验字段上打的规则注解(@NotNull, @NotEmpty等)都可以对 @Valid 和 @Validated 生效;

2:@Valid 进行校验的时候,需要用 BindingResult 来做一个校验结果接收。当校验不通过的时候,如果手动不 return ,则并不会阻止程序的执行;

3:@Validated 进行校验的时候,当校验不通过的时候,程序会抛出400异常,阻止方法中的代码执行,这时需要再写一个全局校验异常捕获处理类,然后返回校验提示。

4:总体来说,@Validated 使用起来要比 @Valid 方便一些,它可以帮我们节省一定的代码,并且使得方法看上去更加的简洁。

此包下其它常用的校验注解:

在这里插入图片描述

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

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

相关文章

智驾芯片市场要“变天”,这家中国厂商如何成为“量产先锋”?

中国智能驾驶芯片的量产之战&#xff0c;正在高歌猛进。 5月19日&#xff0c;黑芝麻智能宣布获得一汽红旗下一代FEEA3.0电子架构平台项目量产智驾芯片定点。据了解&#xff0c;基于黑芝麻智能华山二号A1000L系列芯片&#xff0c;一汽红旗将打造非分时复用的高性价比行泊一体自…

OpenHarmony社区运营报告(2023年4月)

本月快讯 • 2023年4月9日&#xff0c;OpenAtom OpenHarmony&#xff08;以下简称“OpenHarmony”&#xff09;3.2 Release新版本发布。相比一年前的OpenHarmony 3.1 Release版本&#xff0c;新版本的系统能力、系统整体性能、稳定性和安全性都进一步得到提升和完善&#xff1b…

小兔鲜项目----vue3入门

目录 认识Vue3 为什么需要学Vue3? Vue3组合式API体验 Vue3更多的优势 使用create-vue搭建Vue3项目 认识 create-vue 使用create-vue创建项目 熟悉项目目录和关键文件 组合式API - setup选项 setup选项的写法和执行时机 setup选项中写代码的特点 组合式API - reactive和…

SEO优化需要天天更新文章吗?

SEO优化并不要求每天都更新文章。 更新频率取决于你网站的内容类型、目标受众和业务需求。以下是一些建议&#xff1a; 高质量内容&#xff1a;关键是提供有价值且吸引人的内容。不要为了更新而随意发布低质量或重复的内容。确保你的文章有深度、独特性和相关性&#xff0c;以…

出现小红书负面笔记怎么维护,需要注意什么

很多时候&#xff0c;我们在品牌发布的过程中&#xff0c;都会遭受到来自各方不同的恶意。比如&#xff0c;品牌在小红书遇到同行或者写手恶意笔记&#xff0c;这个时候&#xff0c;大家肯定想要的就是不要负面笔记。今天来和大家分享下出现小红书负面笔记怎么维护&#xff0c;…

C++程序在Windows系统上启动失败与运行卡死问题排查实战

目录 1、VS2017默认编译出来的程序&#xff0c;不支持XP系统 1.1、新版本软件为什么要选择VS2017&#xff1f; 1.2、VS2017如何配置才能编出支持XP系统的程序&#xff1f; 1.3、最终选择使用VS2010编出的版本 2、程序在XP系统中启动报错&#xff0c;无法启动 2.1、提示在…

浅谈元年方舟数据中台之标签管理平台

在现如今的大数据时代&#xff0c;相信大家一定了解或者听说过下列几个场景&#xff1a; 购物APP&#xff1a;千人千面&#xff0c;意思不同用户使用相关的产品感觉是不一样的&#xff0c;不同用户看到的购物APP首页推荐内容和其他相关推荐流信息可能是完全不同的。 社交APP&a…

【MySQL新手到通关】第一章 数据库概述

文章目录 1. 为什么要使用数据库2. 数据库与数据库管理系统2.1 数据库的相关概念2.2 数据库与数据库管理系统的关系 3. MySQL介绍3.1 概述3.2 关于MySQL 8.03.3 为什么选择 MySQL3.4 Oracle vs MySQL 4. RDBMS 与 非RDBMS4.1 关系型数据库4.1.1 实质4.1.2 优势 4.2 非关系型数据…

基于QEMU的RISC-V架构linux系统开发(二)——RISC-V的Linux内核移植

1.在国内linux镜像源&#xff08;网易&#xff09;linux内核稳定版本V5.15.73&#xff08;注意&#xff1a;因为buildroot不支持最新版本&#xff0c;因此不下载最新版本&#xff09;的版本源码&#xff0c;链接如下所示&#xff1a; http://mirrors.163.com/kernel/v5.x/ 图1…

Linux 常用远程连接工具你用过几个?

想必大家对linux不陌生&#xff0c;但是一提起如何远程连接它可能一头雾水&#xff0c;今天通过下面的几个工具来简单探讨一下常用的linux远程连接工具的使用&#xff0c;希望对你的日常使用有所帮助。 1、Xshell 介绍&#xff1a; xshell 是一个非常强大的安全终端模拟软件…

如何借助Kafka持久化存储K8S事件数据?

大家应该对 Kubernetes Events 并不陌生&#xff0c;特别是当你使用 kubectl describe 命令或 Event API 资源来了解集群中的故障时。 $ kubectl get events15m Warning FailedCreate …

c语言笔试题整理

1、请填写 bool , float, 指针变量 与 “零值” 比较的 if 语句。 提示&#xff1a;这里“零值”可以是0, 0.0 , FALSE 或者“空指针”。 例如int 变量n 与“零值”比较的if 语句为&#xff1a; if ( n 0 ) if ( n ! 0 ) 以此类推。 (1&#xff09;请写出bool flag 与“零值…

陪诊系统源码|陪诊系统开发|陪诊小程序源码

随着医疗技术的不断发展&#xff0c;陪诊已经成为了一个非常普遍的现象。随之而来的&#xff0c;就是一款名为“陪诊小程序”的应用产品的诞生。这款小程序通过互联网技术来提供陪诊服务&#xff0c;包含了很多实用功能。下面&#xff0c;我们就来详细介绍一下陪诊小程序的功能…

【历史上的今天】5 月 22 日:Windows 3.0 发布;虚幻引擎诞生;《吃豆人》问世

整理 | 王启隆 透过「历史上的今天」&#xff0c;从过去看未来&#xff0c;从现在亦可以改变未来。 今天是 2023 年 5 月 22 日&#xff0c;在 1994 年的今天&#xff0c;知名中文论坛曙光 BBS 站开通。1994 年 4 月 20 日&#xff0c;建立在中科院和北京大学、清华大学之间的…

Spring 官方建议的在 Spring Boot 应用中如何做单元测试

Spring Boot 提供了丰富的测试功能&#xff0c;主要由以下两个模块组成&#xff1a; ● spring-boot-test&#xff1a;提供测试核心功能。 ● spring-boot-test-autoconfigure&#xff1a;提供对测试的自动配置。 Spring Boot 提供了一个 spring-boot-starter-test一站式启动…

springboot+vue私人健身与教练预约管理系统(源码+文档)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的私人健身与教练预约管理系统。项目源码以及部署相关请联系风歌&#xff0c;文末附上联系信息 。 &#x1f495;&#x1f495;作者&…

【Java】常见内存溢出OOM

文章目录 前言一、定义二、 为什么会OOM&#xff1f;三、JVM内存模型四、OOM常见类型4.1 java堆内存溢出4.2 方法区溢出4.3 JAVA虚拟机栈溢出 五、OOM分析--heapdump总结 前言 一、定义 内存溢出&#xff1a; out of memory&#xff0c;OOM&#xff0c;全称“Out Of Memory”&…

西门子S7-1200 PLC之间无线PROFINET通信

西门子S7-1200 PLC 使用Profinet通讯时&#xff0c;一个做Profinet IO控制器&#xff0c;一个做Profinet IO设备。一个Profinet IO控制器可以最多支持16个Profinet IO设备&#xff0c;Profinet通讯不使用通讯指令&#xff0c;只需要配置好数据传输地址&#xff0c;就能够实现数…

睿铂在广东,自然资源部经济管理科学研究所“多测合一”项目分享

引言 DG4 Pros倾斜摄影相机作为睿铂旗舰系列产品&#xff0c;它的硬件与软件配置都无愧于其顶级倾斜相机的称号。在它的帮助下&#xff0c;客户得以挑战很多以往受限于设备技术条件&#xff0c;实施起来非常困难的项目。 本次&#xff0c;自然资源部经济管理科学研究所&#…