统一参数校验

news2024/11/26 8:51:05

使用注解,统一参数校验

我们在实际的开发过程中经常会遇到需要对参数进行校验的情况,比如在需要用户输入手机号的时候他是不是真的输入了一个合法的手机号,在需要用户输入一个邮箱的时候他是不是真的输入了一个合法的邮箱,用户输入的内容是不是超出了长度限制等等。

当一个表单的数据较多的时候,单纯的数据校验代码就会占到很大的幅度,所以简化基础数据的校验可以省去我们很多的工作,让我们能更专注于功能的实现。

接下来我们一起看一下 springboot中参数校验(validation)的使用,首先导入依赖

<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-validation</artifactId>
</dependency>

Validator可以非常方便的制定校验规则,并自动帮你完成校验。首先在入参里需要校验的字段加上注解,每个注解对应不同的校验规则,并可制定校验失败后的信息:

public class User {
    
    private String userId;

    @NotNull(message = "username 不能为空")
    private String username;
}

校验规则和错误提示信息配置完毕后,接下来只需要在接口需要校验的参数上加上@Validated注解,并添加BindResult参数即可方便完成验证:

@RestController
@RequestMapping("/user")
public class UserController {

    @RequestMapping("/addUser")
    public BaseResponse addUser(@Validated User user, BindingResult bindingResult){

        List<FieldError> fieldErrors = bindingResult.getFieldErrors();

        //如果参数校验失败,会将错误信息封装成对象组装在 BindingResult
        if(!fieldErrors.isEmpty()){
            return BaseResponse.fail(fieldErrors.get(0).getDefaultMessage());
        }

        return BaseResponse.success("OK");
    }
}

测试

http://localhost:8888/user/addUser?username="tom"
{
 "code": "500",
 "message": "userId 不能为空",
 "data": null
}
http://localhost:8888/user/addUser?username="tom"&userId=1
{
 "code": "200",
 "message": "操作成功",
 "data": "OK"
}

内置的校验注解有很多,罗列如下在这里插入图片描述

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

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

相关文章

可以在手机做笔记的app哪一款比较好用?

在这个信息爆炸的时代&#xff0c;人们需要快速有效地记录和整理信息。随着智能手机的普及&#xff0c;越来越多的人选择在手机上做笔记&#xff0c;相对于纸笔记录&#xff0c;手机笔记app的好处更多。 一款优秀的笔记app可以帮助我们进行内容整理&#xff0c;我们可以将笔记…

Mysql8.0下载及安装步骤完整教程

1.首先去官网下载Mysql8.0压缩包 官网地址&#xff1a;MySQL :: Download MySQL Community Server 文件下载后解压到D盘&#xff0c;具体路径可以根据自己习惯。 我解压的具体位置&#xff1a;D:\Program Files 2.创建配置文件my.ini 在和bin同级目录创建文件 my.ini&#x…

FuLLGC模拟及结果流程

内存泄漏、内存溢出、CPU飙升三者之间的关系 内存泄露可能会导致内存溢出。 内存溢出会抛出异常&#xff0c;内存泄露不会抛出异常&#xff0c;大多数时候程序看起来是正常运行的。 内存泄露的程序&#xff0c;JVM频繁进行FullGC尝试释放内存空间&#xff0c;进而会导致CPU飙升…

能流畅运行OctaneRender 的硬件建议

OctaneRender 是一个完全基于 GPU 的渲染引擎。这意味着系统中的显卡&#xff08;或 GPU&#xff09;会影响渲染完成所需的时间&#xff0c;而不是 CPU。 处理器&#xff08;CPU&#xff09; 在 OctaneRender 以及大多数其他基于 GPU 的引擎中&#xff0c;CPU 在渲染场景的过程…

Flutter流式组件Wrap

Wrap组件类似Row组件都是横向依次排列&#xff0c;唯一的区别就是Wrap能自动换行。 主要代码&#xff1a; Wrap(spacing: 10, //左右间距runSpacing: 10, //上下间距// direction: Axis.vertical,//主轴的方向&#xff0c;默认横向// alignment: WrapAlignment.spaceBetween, …

【Element】Tree 树形控件

使用el-tree完成下拉框单选功能 <label class"handle-label">部门:</label> <el-select v-model"bm" ref"selectTree" class"wd150" placeholder"请选择" clearable clear"handleTreeClear">…

Aop基于xml和注解应用

基于 XML 的 AOP 开发 问题1&#xff1a;在通知方法中如何定义切入点表达式&#xff1f; 问题2&#xff1a;如何配置切面&#xff1f; 问题3&#xff1a;在配置类上如何开启AOP注解功能&#xff1f; 1.1 快速入门 ①导入 AOP 相关坐标 ②创建目标接口和目标类&#xff08…

linux环境安装docker+confluence

前言 本次安装的环境 centos 7.6 一、安装docker 1、yum安装docker 更新yum yum update yum安装docker yum install docker 2、开启镜像加速 mkdir /etc/docker vi /etc/docker/daemon.json 3、启动docker 查看docker版本 docker --version 启动docker service docker s…

ps 2023(24.7beta) mac

Photoshop 2023 beta,一款专业图像处理软件&#xff0c;它主要用于图像编辑、合成和设计等方面。Photoshop beta创新式填充是Adobe Photoshop的一项新功能&#xff0c;它可以自动识别和删除照片中的对象并用周围的图像填充空白部分。这个新功能使用了人工智能和机器学习技术&am…

直线模组在新能源汽车中的应用

发展新能源汽车是我国从汽车大国迈向汽车强国的必由之路&#xff0c;是应对气候变化、推动绿色发展的战略举措&#xff0c;新能源汽车免征车辆购置税政策的延续&#xff0c;能够稳定促进新能源汽车发展&#xff0c;加速新能源车对于燃油车的全面替代。 直线模组技术的飞速发展&…

Doris实战篇-准实时数仓架构设计与实现

前言 这是一篇Doris数据仓库架构随笔&#xff0c;会应用到一些优秀的用户案例和自己的见解&#xff0c;欢迎大家留言评论。 前景回顾 下图是之前文章有提到过的数仓架构&#xff0c;这种架构的好处是实时强&#xff0c;数据产生以后&#xff0c;直接可以消费到&#xff0c;而…

【网络安全】带你了解【黑客】

Yan-英杰的主页 悟已往之不谏 知来者之可追 C程序员&#xff0c;2024届电子信息研究生 目录 引言 1. 定义 2. 分类 a. 白帽黑客&#xff08;White Hat Hacker&#xff09; b. 黑帽黑客&#xff08;Black Hat Hacker&#xff09; c. 灰帽黑客&#xff08;Gray Hat Hacker…

【Docker】Docker中 AUFS、BTRFS、ZFS、存储池概念的详细讲解

前言 Docker 是一个开源的应用容器引擎&#xff0c;让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux或Windows操作系统的机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。 &#x1f4d5;作者简介&#xff1a;热…

企业如何搭建一个出色的帮助中心?做好这6点很重要!

伴随着互联网的不断普及和快速发展&#xff0c;我们的生活已经发生了翻天覆地的改变&#xff0c;企业的商业模式也不断地适应着时代。为了提供给用户更加便捷的服务&#xff0c;逐渐地有更多企业将业务转移到线上。比如&#xff0c;餐馆为了解决点餐难题&#xff0c;就会上线点…

LINUX IOWAIT 是怎么回事,和数据库性能有关吗? (翻译)

开头还是介绍一下群&#xff0c;如果感兴趣polardb ,mongodb ,mysql ,postgresql ,redis 等有问题&#xff0c;有需求都可以加群群内有各大数据库行业大咖&#xff0c;CTO&#xff0c;可以解决你的问题。加群请联系 liuaustin3 &#xff0c;在新加的朋友会分到2群&#xff08;共…

Redis线程模式

目录 redis6.0之前&#xff1a;单Reactor单线程 问&#xff1a;为什么Redis要选择单线程&#xff1f;&#xff1f;&#xff1f; redis6.0后引入多线程IO redis6.0之前&#xff1a;单Reactor单线程 大致工作流程&#xff1a; 首先&#xff0c;调用 epoll_create() 创建一个 …

剑指 Offer 17: 打印从1到最大的n位数

首先&#xff0c;List类型的要么存Integer&#xff0c;要么存int[]&#xff0c;并且后面实现是用ArrayList&#xff01; 这边的i和j应该从1开始&#xff0c;因为0不能做高位也不能做位数。 这里注意&#xff0c;1是List的实现是用ArrayList&#xff0c;2是从1开始&#xff08;1…

C++的引用 拷贝赋值和引用赋值

&#x1f4af; 博客内容&#xff1a;C的引用 拷贝赋值和引用赋值 &#x1f600; 作  者&#xff1a;陈大大陈 &#x1f680; 个人简介&#xff1a;一个正在努力学技术的准前端&#xff0c;专注基础和实战分享 &#xff0c;欢迎私信&#xff01; &#x1f496; 欢迎大家&#…

排名前十的开放式蓝牙耳机,哪个蓝牙耳机好一点?

当前耳机最大的受众群体就是年轻人&#xff0c;最怕自己吵到别人&#xff0c;而且更注重自己的舒适度&#xff0c;所以开放式耳机自从出现以来就深受年轻人喜爱&#xff0c;这种耳机用起来很方便&#xff0c;而且振动感不强&#xff0c;不用进入耳道&#xff0c;拥挤耳朵。开放…

C++图形开发(8):空格键控制小球起跳

文章目录 1.绘制小球2.按下空格让小球跳起来 我们今天来实现下按下空格键控制小球的起跳&#xff08;还没阅读之前文章的同学可以先去阅读一下&#xff1a;C图形开发专栏&#xff09; 1.绘制小球 首先&#xff0c;我们要绘制小球&#xff0c;这里就不细讲啦&#xff0c;之前的…