Java开发-参数校验@NotEmpty、@NotBlank、@NotNull

news2025/6/21 19:36:51

大家好,我是小资。今天给大家说下参数校验。

标题中说的这三个注解所在的包路径为import javax.validation.constraints.*;

千万不要导错包哦,因为他们在好多包里都存在。开发只需引入Spring-web依赖就可以使用了。轻轻松松干掉多余的if-else。

下面我们就一起看看它们具体怎么使用和有什么区别呢。

介绍和区别

@NotNull

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

源码包注释

源码注释翻译:被注释的元素不能为空。接受任何类型。

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

@NotBlank

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

源码包注释

源码注释翻译:带注释的元素不能为空,并且必须包含至少一个非空白字符。接受CharSequence。

@NotEmpty

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

源码包注释

源码注释翻译:被注释的元素既不能为null也不能为空。

使用方法

实体类使用方法

@Data

@EqualsAndHashCode(callSuper = false)

@Accessors(chain = true)

public class ArticleRequest implements Serializable {

private static final long serialVersionUID=1L;

@NotBlank(message = "请填写文章标题")

@Length(max = 200, message = "文章标题最多200个字符")

private String title;

@NotBlank(message = "请填写文章作者")

@Length(max = 50, message = "文章作者最多50个字符")

private String author;

@NotNull(message = "是否热门不能为空")

private Boolean isHot;

@NotEmpty(message = "其他推荐文章不能为空")

private List<ArticleRequest> articleRequestList;

}

Controller方法的使用

以上这些校验的注解都是需要@Valid 或@Validated 配合上使用才会生效的,还可以对新增和修改做单独的配置

@Valid 包位置:import javax.validation.Valid;

@Validated 包的位置:

import org.springframework.validation.annotation.Validated;

/**

* 新增文章管理表

* @param articleRequest 新增参数

*/

@RequestMapping(value = "/save", method = RequestMethod.POST)

public CommonResult<String> save(@RequestBody @Valid ArticleRequest articleRequest) {

if (articleService.create(articleRequest)) {

return CommonResult.success();

} else {

return CommonResult.failed();

}

}

/**

* 新增文章管理表

* @param articleRequest 新增参数

*/

@RequestMapping(value = "/save", method = RequestMethod.POST)

public CommonResult<String> save(@RequestBody @Validated ArticleRequest articleRequest) {

if (articleService.create(articleRequest)) {

return CommonResult.success();

} else {

return CommonResult.failed();

}

}

@Valid 和 @Validated 比较

最后我们来对 @Valid 和 @Validated 两个注解简单对比下

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

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

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

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

新增和修改单独配置

在开发中我们会遇到某些字段是新增是必传的而修改不是必传,这种情况我们就可以单独对其进行指定。以下为配置方法。

  • 字段配置

@NotBlank(message = "名称不能为空", groups = { AddGroup.class, EditGroup.class })

private String name;

其中groups属性就可以实现该字段的单独设置说,其中AddGroup和EditGroup是自己定义的两个接口文件,它们两个类中没有任何代码,只需要将接口创建下即可。

  • @Validated指定

@Validated(EditGroup.class)

在注解中填写需要校验的场景,以上事例为只校验修改,其参数是数组格式,需要填写多个时换成数组格式即可

@Validated({AddGroup.class,EditGroup.class})

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

其他注解和解释

总结

  • @NotEmpty :用于集合类,不能为null,且size>0

  • @NotNull:不能为null,但可以为empty,没有size的约束

  • @NotBlank:只用于String,不能为null,且trim()之后size>0

  • @Validated比@Valid较为好用

结束语

以上则参数校验的注解使用和对比,快去试试吧!

如果大家觉得文章内容不错,快去分享给更多小伙伴吧。

创作不易,感谢大家的支持,多多关注、分享、点赞,您的鼓励是我前进的动力。

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

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

相关文章

NiFi中缓存组件的运行机制及增删改缓存数据

要理解本文内容,需对NIFI有一定的了解,如果您是新手,想学习NIFI,或者想在数仓架构中引入NIFI,欢迎加我微信bigdata_work,我这有一整套使用NIFI的实时数仓落地方案。 在建设实时数仓的过程中,利用缓存机制来提升实时指标的实时性,是一种常用的方法。NIFI提供了专门的缓存…

Git相关知识(2)

目录 1.远程操作 1.基本认识 2.克隆远程仓库 3.向远端仓库推送 4.从远程仓库中拉取 5.忽略特殊文件 6.配置命令别名 2.标签管理 1.本地的标签 2.远端的标签 3.多人协作 1.远端同一个分支 2.远端不同的分支 4.企业级开发模型 1.交付软件流程 2.系统开发环境 1.…

振弦采集仪应用水坝安全监测的方案

振弦采集仪应用水坝安全监测的方案 随着工业化和城市化的快速发展&#xff0c;水资源的开发和利用越来越广泛。由于水坝在水利工程中起着至关重要的作用&#xff0c;因此对水坝进行安全监测变得越来越必要。为了实现对水坝的安全监测&#xff0c;振弦采集仪可以作为一种有效的…

Python+高光谱数据预处理-机器学习-深度学习-图像分类-参数回归

涵盖高光谱遥感数据处理的基础、python开发基础、机器学习和应用实践。重点解释高光谱数据处理所涉及的基本概念和理论&#xff0c;旨在帮助学员深入理解科学原理。结合Python编程工具&#xff0c;专注于解决高光谱数据读取、数据预处理、高光谱数据机器学习等技术难题&#xf…

SRC-记一处目录遍历

目录 安徽阳光心理测量平台目录遍历 FOFA指纹 漏洞复现 修复方案 hack渗透视频教程&#xff0c;扫码免费领 安徽阳光心理测量平台目录遍历 FOFA指纹 title"心理测量平台" 漏洞复现 路由后拼接/admin/UserFiles/ GET /admin/UserFiles/ HTTP/1.1 Host: {{Hostn…

关于pytorch不区分行向量与列向量的理解

听李沐老师讲深度学习时候解释pytorch不区分行向量和列向量&#xff0c;只相当于是一维数组&#xff0c;一维张量一定是行向量&#xff0c;相当于数组&#xff0c;而行列向量可以放到矩阵中看。 测试如下&#xff1a; rtorch.tensor([1,2,3],dtypetorch.float32) print(r,r.T…

Spring Boot中发送邮件时,如何让发件人显示别名

之前&#xff0c;我们通过一系列文章&#xff0c;介绍了如何在Spring Boot中发送邮件&#xff1a; 发送邮件添加附件引用静态资源邮件模版 已经包含了大部分的应用场景。但最近DD在做YouTube中文配音的时候&#xff0c;碰到一个问题&#xff1a; 如上图所示&#xff0c;收件人…

Android开发APT技术,与使用案例

annotationProcessor 是 javac 的一个工具&#xff0c;全称为 APT&#xff08;apt 工具&#xff0c;Annotation Processor Tool&#xff09;&#xff0c;它用来在编译时扫描和处理注解&#xff0c;获取注解和被注解对象的相关信息&#xff0c;然后根据注解自动生成 java 代码。…

【arm实验2】按键中断事件控制实验

设置按键中断&#xff0c;按键1按下&#xff0c;LED亮&#xff0c;再次按下&#xff0c;灭 按键2按下&#xff0c;蜂鸣器叫&#xff0c;再次按下&#xff0c;停 按键3按下&#xff0c;风扇转&#xff0c;再次按下&#xff0c;停 主函数&#xff1a; linuxlinux:~/study/08-c$…

江苏建筑模板厂家-建筑模板批发供应商

江苏建筑模板厂家在建筑行业中扮演着重要的角色。建筑模板是建筑施工中不可或缺的一部分&#xff0c;用于支撑混凝土浇筑过程中的形状和结构。在江苏地区的气候地形、经济发展和建筑风格等方面的考虑下&#xff0c;我们将对几种常见的建筑模板材料进行比较&#xff0c;包括钢模…

Linux Centos安装Sql Server数据库,结合cpolar内网穿透实现公网访问

目录 前言 1. 安装sql server 2. 局域网测试连接 3. 安装cpolar内网穿透 4. 将sqlserver映射到公网 5. 公网远程连接 6.固定连接公网地址 7.使用固定公网地址连接 前言 简单几步实现在Linux centos环境下安装部署sql server数据库&#xff0c;并结合cpolar内网穿透工具…

ElementUI编辑表格单元格与查看模式切换的应用

需求&#xff1a;有时候在填写表单的时候&#xff0c;想要在输入的时候是input输入框的状态&#xff0c;但是当鼠标移出输入框失去焦点时&#xff0c;希望是查看的状态&#xff0c;这种场景可以通过 v-if实现 vue2ElementUi里面使用如下&#xff1a; 1.el-table标签注册 cell-…

非交互式ssh command无法找到命令command not found

起因 mha做check时无法获得node的版本 问题判断 分析下源码 执行的代码实际是 ssh $MHA::ManagerConst::SSH_OPT_ALIVE $ssh_user_host -p $ssh_port apply_diff_relay_logs --version 这里附一下ssh用的const SSH_OPT_ALIVE "-o ServerAliveInterval60 -o ServerAl…

MySQL 3 环境搭建 MySQL 5.7版本的安装、配置

MySQL5.7.43官网下载地址 MySQL :: Download MySQL Community Server 这里选5.7.43&#xff0c;Windows版本&#xff0c;然后点击Go to Download Page&#xff0c;下载msi安装包的版本 MSI安装包版本比ZIP压缩包版本的安装过程要简单的多&#xff0c;过程更加清楚直观&#x…

位运算解决简单逻辑推理问题

今天在学习Go语言中的位运算时&#xff0c;老师突然问我们位运算可以有哪些运用场景&#xff1f;这一点让我一下子想到了刷到的leetcode中的两道题目&#xff0c;例如丢失的数字和只出现一次的数字。有兴趣的小伙伴可以尝试做做看。 这两道题目都是用位运算解决的&#xff0c;并…

软考实行机考后,考前需要带什么?

软考实行机考之后&#xff0c;很多宝子们都在问考场需要带什么&#xff1f;今天给大家分享一下需要准备的东西~大家自行查看 添加图片注释&#xff0c;不超过 140 字&#xff08;可选&#xff09; 2023年11月软考考前必看—考试需携带的物品 1、从2023年下半年开始&#xff0c…

网页博弈测试报告

文章目录 项目介绍项目测试用例自动化测试注册自动化测试登录自动化测试匹配测试 性能测试编写脚本创建测试场景性能测试报告 项目介绍 该项目是一个网页对战的五子棋游戏&#xff0c;支持真人匹配对战和人机对战&#xff0c;支持多用户同时匹配进行五子棋对战&#xff0c;通过…

mysql数据库 windows迁移至linux

1.打开navicat&#xff0c;选择一个数据库进行操作&#xff1a; 之后文件会保存为一个xxx.sql文件&#xff0c;之后打开xftp&#xff0c;把生成的sql放进一个文件夹中(/home/dell/linuxmysql)&#xff1a; 之后登录mysql数据库&#xff0c;并创建一个新的数据库&#xff0c;然后…

Pytorch之ConvNeXt图像分类

文章目录 前言一、ConvNeXt设计决策1.设计方案2.Training Techniques3.Macro Design&#x1f947;Changing stage compute ratio&#x1f948;Change stem to "Patchify" 4.ResNeXt-ify5. Inverted Bottleneck6.Large Kernel Size7.Micro Design✨Replacing ReLU wit…

论文阅读:Fast-BEV: Towards Real-time On-vehicleBird’s-Eye View Perception

Abstract 现有的BEV解决方案要么需要大量的资源执行车载推理&#xff0c;要么效果一般。Fast-BEV包含五部分&#xff1a; 1&#xff09;一个轻量化部署友好的视角转换方式&#xff0c;可以快速将2D图像特征转到3D体素空间。 2&#xff09;一个多尺度图像编码器利用多尺度特征。…