Spring Boot 如何使用 @RequestParam 进行数据校验

Spring Boot 如何使用 @RequestParam 进行数据校验

在 Web 应用程序中,用户提交的数据通常以请求参数的形式传递。在 Spring Boot 中,可以使用 @RequestParam 注解来获取请求参数。但是,如何确保这些请求参数的有效性呢?在本文中,我们将介绍如何使用 @RequestParam 注解进行数据校验,并提供一些示例代码来帮助您更好地理解。

在这里插入图片描述

@RequestParam 简介

在 Spring Boot 中,@RequestParam 注解用于从请求中获取参数值。默认情况下,参数是必填的,如果请求中未包含参数,则会抛出 MissingServletRequestParameterException 异常。但是,您可以使用 required 属性来将参数设置为可选。

例如,以下代码使用 @RequestParam 注解来获取名为 id 的请求参数:

@GetMapping("/users/{id}")
public User getUser(@PathVariable Long id, @RequestParam Long status) {
    // 处理获取用户逻辑
}

在上面的代码中,@RequestParam 注解用于获取名为 status 的请求参数。如果请求中未包含 status 参数,则会抛出 MissingServletRequestParameterException 异常。

数据校验

为了确保请求参数的有效性,您可以使用 javax.validation.constraints 包中的注解来对请求参数进行校验。例如,以下代码使用 @Min 注解来验证 id 参数的最小值:

@GetMapping("/users/{id}")
public User getUser(@PathVariable @Min(1) Long id) {
    // 处理获取用户逻辑
}

在上面的代码中,@Min 注解用于验证 id 参数的最小值是否为 1。如果 id 参数小于 1,则会抛出 MethodArgumentNotValidException 异常。

除了 @Min 注解之外,还有许多其他的注解可以用来对请求参数进行校验。例如,@Max 注解用于验证参数的最大值,@NotBlank 注解用于验证字符串是否不为空,@Email 注解用于验证邮箱地址格式等。

自定义错误消息

默认情况下,如果请求参数无效,则会抛出 MethodArgumentNotValidException 异常,并带有默认的错误消息。但是,您可以使用 message 属性来指定自定义的错误消息。

例如,以下代码使用自定义错误消息来验证 id 参数的最小值:

@GetMapping("/users/{id}")
public User getUser(@PathVariable @Min(value = 1, message = "id 必须大于等于 1") Long id) {
    // 处理获取用户逻辑
}

在上面的代码中,我们使用 message 属性来指定自定义的错误消息。如果 id 参数小于 1,则会抛出 MethodArgumentNotValidException 异常,并带有自定义的错误消息。

组合校验

有时,您可能需要对多个请求参数进行组合校验。例如,您可能需要验证 start 参数是否小于 end 参数。在这种情况下,您可以使用 @Valid 注解和自定义对象来实现组合校验。

以下是一个示例代码,该代码使用自定义对象 DateRange 来组合校验 startend 参数:

public class DateRange {
    @NotNull
    @DateTimeFormat(iso = DateTimeFormat.ISO.DATE)
    private LocalDate start;

    @NotNull
    @DateTimeFormat(iso = DateTimeFormat.ISO.DATE)
    private LocalDate end;

    // getters/setters omitted
}

@GetMapping("/users")
public List<User> getUsers(@Valid DateRange dateRange) {
    // 处理获取用户列表逻辑
}

在上面的代码中,我们使用 @Valid 注解来验证 DateRange 对象。DateRange 对象包含 startend 属性,它们分别使用 @NotNull@DateTimeFormat 注解进行校验。如果 start 大于 end,则会抛出 MethodArgumentNotValidException 异常。

总结

在本文中,我们介绍了如何使用 @RequestParam 注解来获取请求参数,并使用 javax.validation.constraints 包中的注解来对请求参数进行校验。我们还展示了如何使用自定义错误消息和组合校验来提高数据校验的灵活性。通过这些示例代码,您可以更好地理解如何在 Spring Boot 应用程序中使用 @RequestParam 进行数据校验。

以下是完整的示例代码:

@RestController
public class UserController {
    @GetMapping("/users/{id}")
    public User getUser(@PathVariable @Min(value = 1, message = "id 必须大于等于 1") Long id) {
        // 处理获取用户逻辑
    }

    public class DateRange {
        @NotNull
        @DateTimeFormat(iso = DateTimeFormat.ISO.DATE)
        private LocalDate start;

        @NotNull
        @DateTimeFormat(iso = DateTimeFormat.ISO.DATE)
        private LocalDate end;

        // getters/setters omitted
    }

    @GetMapping("/users")
    public List<User> getUsers(@Valid DateRange dateRange) {
        // 处理获取用户列表逻辑
    }
}

希望这篇文章对您有所帮助,谢谢阅读!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

APP测试面试题快问快答(五)

21. App自动化你用的什么工具&#xff1f; 框架&#xff1a;Appium 编译环境和工具&#xff1a;python3.7和PyCharm 环境&#xff1a;Android sdk 第三方模拟器&#xff1a;夜神、蓝叠等模拟器 定位工具&#xff1a;uiautomatorviewer 实时日志查看&#xff1a;ddms 22.…

智慧加油站卸油作业行为分析算法 opencv

智慧加油站卸油作业行为分析系统通过opencvpython网络模型技术&#xff0c;智慧加油站卸油作业行为分析算法实现对卸油作业过程的实时监测。当现场出现卸油作业时人员离岗&#xff0c;打电话人员抽烟等违规行为&#xff0c;灭火器未正确摆放&#xff0c;明火和烟雾等异常状态&a…

TypeScript零基础入门之背景介绍和环境安装

一、什么是TypeScript TypeScript是一种由微软开发和维护的开源编程语言。它是JavaScript的超集&#xff0c;意味着任何JavaScript程序都是一种有效的TypeScript程序。TypeScript添加了静态类型、类、接口、枚举和命名空间等概念&#xff0c;同时支持ES6特性。TypeScript被视为…

Kubernetes入门实战课-初始容器

Kubernetes入门实战课-初始容器 文章目录 Kubernetes入门实战课-初始容器课前准备初始容器Docker 的形态Docker 的安装Docker 的架构 容器的本质隔离原因与虚拟机区别隔离是怎么实现的 镜像创建容器镜像&#xff1a;如何编写正确、高效的Dockerfile镜像的内部机制是什么Dockerf…

Spring介绍

⭐作者介绍&#xff1a;大二本科网络工程专业在读&#xff0c;持续学习Java&#xff0c;努力输出优质文章 ⭐作者主页&#xff1a;逐梦苍穹 ⭐所属专栏&#xff1a;JavaEE、Spring 目录 1、Spring简介2、轻量级和非侵入性3、IoC容器4、AOP支持5、声明式事务管理6、数据访问支持…

【基于Django框架的在线教育平台开发-02】用户注册功能开发

用户注册功能开发 文章目录 用户注册功能开发1 模型层开发2 视图层开发3 配置urls.py4 表单验证5 模板层开发6 效果展示 1 模型层开发 用户数据表如下所示&#xff1a; FieldTypeExtraidintPrime Key & Auto Incrementpasswordvarchar(128)last_logindatetime(6)Allow Nu…

第八章 模型篇:transfer learning for computer vision

参考教程&#xff1a; transfer-learning transfer-learning tutorial 文章目录 transfer learning对卷积网络进行finetune把卷积网络作为特征提取器何时、如何进行fine tune 代码示例加载数据集构建模型fine-tune 模型模型作为feature extractor 定义train_loop和test_loop定…

Docker常见使用

Docker常见使用 1、Docker安装 ## 下载阿里源repo文件 $ curl -o /etc/yum.repos.d/Centos-7.repo http://mirrors.aliyun.com/repo/Centos-7.repo $ curl -o /etc/yum.repos.d/docker-ce.repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo$ yum clean …

工业相机的镜头如何选择?

相机的镜头如何计算&#xff0c;如果看公式的话&#xff0c;需要知道相机sensor的尺寸&#xff0c;相元的尺寸&#xff0c;计算起来数据也比较复杂&#xff0c;下面教大家一个简单的方法&#xff0c;就是如何借助镜头计算工具来使用。 巴斯勒相机的镜头选型地址 工业镜头选型…

操作系统之死锁详解

本文已收录于专栏 《自考》 目录 背景介绍死锁的前提死锁的概念死锁的分类死锁的产生原因条件 死锁的解决预防避免检测与恢复 死锁的实现总结提升 背景介绍 最近一直在做操作系统的测试题&#xff0c;在做题的过程中发现有很多地方涉及到了关于死锁的知识点。今天就回归课本来自…

哈工大计算机网络课程网络层协议详解之:网络地址转换NAT

哈工大计算机网络课程网络层协议详解之&#xff1a;网络地址转换NAT 文章目录 哈工大计算机网络课程网络层协议详解之&#xff1a;网络地址转换NAT网络地址转换&#xff08;NAT&#xff09;NAT实现原理NAT穿透问题NAT穿透问题的解决方案 上一节中&#xff0c;我们在DHCP协议中介…

【人脸检测——基于机器学习4】HOG特征

前言 HOG特征的全称是Histograms of Oriented Gradients,基于HOG特征的人脸识别算法主要包括HOG特征提取和目标检测,该算法的流程图如下图所示。本文主要讲HOG特征提取。 HOG特征的组成 Cell:将一幅图片划分为若干个cell(如上图绿色框所示),每个cell为8*8像素 Block:选…

【力扣刷题 | 第十四天】

目录 前言&#xff1a; 7. 整数反转 - 力扣&#xff08;LeetCode&#xff09; 面试题 16.05. 阶乘尾数 - 力扣&#xff08;LeetCode&#xff09; 总结; 前言&#xff1a; 今天仍然是无固定类型刷题&#xff0c; 7. 整数反转 - 力扣&#xff08;LeetCode&#xff09; 给你…

Android大图加载优化方案,避免程序OOM

我们在编写Android程序的时候经常要用到许多图片&#xff0c;不同图片总是会有不同的形状、不同的大小&#xff0c;但在大多数情况下&#xff0c;这些图片都会大于我们程序所需要的大小。比如微博长图&#xff0c;海报等等。所以我们就要对图片进行局部显示。 大图加载基本需求…

Redis入门(5)-set

Redis中set的元素具有无序性与不可重复性 1.sadd key member[member] 添加元素&#xff0c;若元素存在返回0若不存在则添加 sadd DB mysql oracle sadd DB mysql sadd DB db22.smembers key 查看set中所有元素 smembers DB3.sismember key member 判断元素在set中是否存…

GIS 功能模块实现

文章目录 1. GIS 模块流程图2. 网页端地图缓存的实现3. GIS 图形操作功能实现1 &#xff09;地图漫游2 &#xff09;对象删除3 &#xff09;选择复制属性查看 GIS 基本功能模块主要是在表现层开发的&#xff0c;是在OpenLayers 开发框架提供的接口上&#xff0c;通过Geo Server…

智芯MCU软件开发环境搭建

智芯MCU软件开发环境搭建 目录 智芯MCU软件开发环境搭建前言1 软件安装2 编译环境3 烧录环境4 新建工程结束语 前言 智芯科技的MCU主要应用于汽车行业&#xff0c;属于车规级的MCU&#xff0c;目前上市的MCU型号较少&#xff0c;相关资料也不多&#xff0c;所以这里出一期开发…

uniapp实现tab切换可以滚动的效果

实现效果 当 tab 切换的内容很多时&#xff0c;需要用到滚动&#xff0c;希望在点击 tab 的时候可以自动滑动到对应的tab下 知识点 scrollIntoView&#xff1a;该scrollIntoView()方法将调用它的元素滚动到浏览器窗口的可见区域。 语法 element.scrollIntoView&#xff08…

【kubernetes】部署controller-manager与kube-scheduler

前言:二进制部署kubernetes集群在企业应用中扮演着非常重要的角色。无论是集群升级,还是证书设置有效期都非常方便,也是从事云原生相关工作从入门到精通不得不迈过的坎。通过本系列文章,你将从虚拟机准备开始,到使用二进制方式从零到一搭建起安全稳定的高可用kubernetes集…

记录正式环境测试环境【RedHat7编译升级redis7.0.9】--有关报错及解决

记录正式环境&测试环境【RedHat7 编译升级redis7.0.9】--有关报错及解决 &#x1f53b; 一、报错详情1.1 ⛳ 写在前面1.2 ⛳ 报错11.3 ⛳ 报错21.4 ⛳ 安装redis1.5 ⛳ 版本检查 &#x1f53b; 二、⛳ 总结 &#x1f53b; 一、报错详情 1.1 ⛳ 写在前面 &#x1f341; 升级…