当前位置: 首页 > article >正文

请求参数、路径参数、查询参数、Spring MVC/FeignClient请求相关注解梳理

目录

      • 1 请求分类
        • 1.1 URL参数--查询参数
        • 1.2 URL参数--路径参数
      • 2 请求相关注解
        • 2.1 @RequestParam--查询参数
        • 2.2 @PathVariable--路径参数
        • 2.3 @RequestBody
        • 2.4 @Param & @RequestLine
        • 2.5 SpringMVC请求参数注解用在FeignClient里

使用SpringMVC处理http请求或使用FeignClient进行请求时,会使用到许多请求相关注解,现梳理一下以免混乱。

1 请求分类

在进行HTTP请求时,会看到“请求参数”、“查询参数”、“路径参数”相关字眼,那么它们之间的关系是什么呢?——请求参数是更加宽泛的概念,它包括查询参数和路径参数,它是指在请求中传递给服务器的数据,可以是URL携带的参数,也可以是请求体,请求数据类型可以是路径参数(rest风格)、查询字符串、JSON数据等,适用于GET/POST/PUT/DELETE方法。

而查询参数和路径参数特指请求URL携带的参数。

1.1 URL参数–查询参数

查询参数一般特指使用GET请求、以URL传递的查询字符串参数,它附加在URL里,参数位于URL的 “?” 之后,由一个或多个以 & 符号分隔的键值对组成。如:

https://example.com/api/users?age=30&sort=name

这个URL传递两个参数agesort,值分别是30name

1.2 URL参数–路径参数

路径参数常用在RESTful API风格中,它是URL路径的一部分,一个形式化的路径参数格式如下,路径参数通常在大括号表示的地方:

https://example.com/api/users/{userId}
https://example.com/api/categories/{categoryId}/products

‘{}’部分在请求时需要填入真实的值,比如:

https://example.com/api/users/1
https://example.com/api/categories/2024/products

2 请求相关注解

请求相关注解有不少,下面逐个介绍一下。

2.1 @RequestParam–查询参数

在后端使用@RequestParam来获取查询参数,对于如下请求路径:

/api/users?sex=1&age1=30&sort=name

响应方式为:

@GetMapping("/api/users")
public List<User> getUsers(@RequestParam(required = falseint sex,@RequestParam(name= "age1", required = false) Integer age,@RequestParam("sort") String sort) {}

以上三种@RequestParam的写法都可以,required 字段默认为true

  • sex: 当没有给定任何注解属性时,会默认将URL请求参数名和响应参数名称进行映射,比如将请求参数sex映射到后端参数sex参数名必须一致)。需要注意的是虽然参数为非必须,但用的是简单类型进行接收,如果前端未传sex字段则会报错,因为不能使用null赋值给简单类型。解决方式是可以使用defaultValue属性设置默认值或者使用包装类型Integer进行接收【defaultValuerequired = false 搭配使用】。当没有显示设置required且前端未传值时,也会尝试赋空值。

  • age: 显示使用两个属性,name规定将查询参数“age1”映射至后端参数“age”

  • sort:比较常用的写法。

2.2 @PathVariable–路径参数

在后端使用@PathVariable来获取路径参数,对于如下请求路径:

/api/users/1

响应方式为:

@GetMapping("/api/users/{userId}")
public User getUserById(@PathVariable String userId) {}

注意路径变量是URL的一部分,必须提供,因此@PathVariable没有required属性。

2.3 @RequestBody

用于将前端的请求体携带的JSON数据绑定到Java对象中。

@PostMapping("/api/users")public String createUser(@RequestBody User user) {}
2.4 @Param & @RequestLine

FeignClient提供的注解,在使用Feign客户端的时候,这两个注解常常搭配使用。

@Param用于将方法参数绑定到请求的URL路径参数查询参数或请求体中,像反向的@RequestParam

@RequestLine在FeignClient里面定义HTTP请求的方法和路径

@FeignClient(name = "user-service", url = "http://localhost:8080")
public interface UserClient {// 使用 @RequestLine 定义HTTP请求方法和路径@RequestLine("GET /users/{id}")User getUserById(@Param("id") Long id);
} 

在使用feignclient的时候,如果@RequestLine@RequestMapping(method = RequestMethod.xxx)(或@PostMapping/@GetMapping)同时出现,会优先使用@RequestLine。因为@RequestLine属于Feign原生注解,而@RequestMapping属于Spring MVC注解,因此Feign在处理请求时会优先选择属于自己的注解规则。

2.5 SpringMVC请求参数注解用在FeignClient里

@RequestParam@PathVariable@RequestBody都属于SpringMVC框架提供的注解,通常用于从请求里解析参数到后端方法参数,而当这些注解用在FeignClient里时,可以实现方法参数到请求的逆向绑定

@FeignClient(name = "user-service", url = "http://localhost:8080")
public interface UserClient {// 1. @RequestParam:绑定查询参数,将方法参数 name 绑定到查询参数 name 上@GetMapping("/users/search")User searchUser(@RequestParam("name") String name);// 2. @PathVariable:绑定路径变量,把方法参数 id 绑定到路径变量 {id} 上@GetMapping("/users/{id}")User getUserById(@PathVariable("id") Long id);// 3. 绑定请求体,把方法参数 user 绑定到请求体上@PostMapping("/users")User createUser(@RequestBody User user);}    

相关文章:

请求参数、路径参数、查询参数、Spring MVC/FeignClient请求相关注解梳理

目录 1 请求分类1.1 URL参数--查询参数1.2 URL参数--路径参数 2 请求相关注解2.1 RequestParam--查询参数2.2 PathVariable--路径参数2.3 RequestBody2.4 Param & RequestLine2.5 SpringMVC请求参数注解用在FeignClient里 使用SpringMVC处理http请求或使用FeignClient进行请…...

MySQL 详解之复制与集群:构建高可用与可扩展数据库架构

随着业务的发展,单一的数据库实例往往难以满足需求: 性能瓶颈: 读写请求量不断增加,单个服务器的 CPU、内存、磁盘、网络资源达到上限,尤其是读请求远大于写请求的场景。高可用性: 单个服务器一旦发生故障(硬件故障、操作系统问题、机房断电等),数据库服务将完全中断,…...

刚体运动 (位置向量 - 旋转矩阵) 笔记 1.1~1.3 (台大机器人学-林沛群)

目录 1. 理解刚体的“自由度”&#xff08;Degrees of Freedom, DOF&#xff09; 1.1 平面运动 (2D) 1.2 空间运动 (3D) 2. 统一描述&#xff1a;引入“体坐标系”&#xff08;Body Frame&#xff09; 3. 从“状态”到“运动”&#xff1a;引入微分 3.1 补充&#xff1a;…...

openAICEO山姆奥特曼未来预测雄文之三个观察

《三个观察》 山姆奥特曼 这篇文章主要讲的是关于AGI&#xff08;人工通用智能&#xff09;的未来发展及其对社会的影响&#xff0c;用大白话总结如下&#xff1a; 核心观点&#xff1a; AGI是什么&#xff1f; AGI是一种能像人类一样解决各种复杂问题的智能系统&#xff0c;比…...

Java 异常 SSLException: fatal alert: protocol_version 全解析与解决方案

在 Java 网络通信中&#xff0c;SSLException: fatal alert: protocol_version 是典型的 TLS/SSL 协议版本不兼容异常。本文结合 Java 官方规范、TLS 协议标准及实战经验&#xff0c;提供体系化解决方案&#xff0c;帮助开发者快速定位并解决协议版本冲突问题。 一、异常本质&…...

比象AI创作系统,多模态大模型:问答分析+AI绘画+管理后台系统

比象AI创作系统是新一代集智能问答、内容创作与商业运营于一体的综合型AI平台。本系统深度融合GPT-4.0/GPT-4o多模态大模型技术&#xff0c;结合实时联网搜索与智能分析能力&#xff0c;打造了从内容生产到商业变现的完整闭环解决方案。 智能问答中枢 系统搭载行业领先的对话…...

【2025 最新前沿 MCP 教程 03】基础构建模块:工具、资源与提示

文章目录 1. 开始啦2. 工具&#xff08;模型控制&#xff09;&#xff1a;赋予 AI 行动能力3. 资源&#xff08;应用控制&#xff09;&#xff1a;为 AI 提供关键上下文4. 提示&#xff08;用户可控&#xff09;&#xff1a;优化 AI 交互5. 它们如何协同工作 1. 开始啦 欢迎来…...

Docker-高级使用

前言 书接上文Docker-初级安装及使用_用docker安装doccano-CSDN博客&#xff0c;我们讲解了Docker的基本操作&#xff0c;下面我们讲解的是高级使用&#xff0c;请大家做好准备&#xff01; 大家如果是从初级安装使用过来的话&#xff0c;建议把之前镜像和搭载的容器数据卷里面…...

计算机网络 | Chapter1 计算机网络和因特网

&#x1f493;个人主页&#xff1a;mooridy-CSDN博客 &#x1f493;文章专栏&#xff1a;《计算机网络&#xff1a;自定向下方法》 大纲式阅读笔记_mooridy的博客-CSDN博客 &#x1f339;关注我&#xff0c;和我一起学习更多计算机网络的知识 &#x1f51d;&#x1f51d; 目录 …...

PowerBi中ALLEXCEPT怎么使用?

在 Power BI 的 DAX 中&#xff0c;ALLEXCEPT() 是一个非常重要的函数&#xff0c;用来实现**“在保留部分筛选条件的前提下&#xff0c;移除其他所有筛选器”**&#xff0c;它常用于 同比、占比、累计汇总 等分析中。 ✅ 一、ALLEXCEPT 是什么意思&#xff1f; 函数全称&…...

开源项目实战学习之YOLO11:ultralytics-cfg-datasets-Objects365、open-images-v7.yaml文件(六)

&#x1f449; 点击关注不迷路 &#x1f449; 点击关注不迷路 &#x1f449; 点击关注不迷路 medical - pills.yaml 通常用于配置与医学药丸检测任务相关的参数和信息 Objects365.yaml 用于配置与 Objects365 数据集相关信息的文件。Objects365 数据集包含 365 个不同的物体类别…...

蚂蚁集团“Plan A”重磅登场,开启AI未来

近期&#xff0c;蚂蚁集团面向全球高潜AI人才&#xff0c;正式发布顶级专项招募计划——“Plan A”。作为其“蚂蚁星”校招体系的全新升级模块&#xff0c;Plan A聚焦人工智能领域科研精英&#xff0c;旨在与全球高校AI研究者协同突破AGI前沿&#xff0c;共绘技术未来图谱。 蚂…...

高中数学联赛模拟试题精选第18套几何题

在 △ A B C \triangle ABC △ABC 中, A B < A C AB< AC AB<AC, 点 K K K, L L L, M M M 分别是边 B C BC BC, C A C A CA, A B AB AB 的中点. △ A B C \triangle ABC △ABC 的内切圆圆心为 I I I, 且与边 B C BC BC 相切于点 D D D. 直线 l l l 经过线段…...

Kettle学习

一、Kettle 简介 Kettle(现称为 Pentaho Data Integration)是一款开源ETL工具,支持从多种数据源抽取、转换和加载数据,广泛应用于数据仓库构建、数据迁移和清洗。其核心优势包括: 可视化操作:通过拖拽组件设计数据处理流程(转换和作业)。多数据源支持:数据库(MySQL/…...

Synopsys 逻辑综合的整体架构概览

目录 一、DC Shell 逻辑综合的整体架构概览 ⛓️ 逻辑综合的主要阶段&#xff08;Pipeline&#xff09; 二、核心架构模块详解 1. Internal Database&#xff08;设计对象数据库&#xff09; 2. Scheduler&#xff08;调度器&#xff09; 3. Rewriting Engine&#xff08…...

Missashe考研日记-day27

Missashe考研日记-day27 0 写在前面 博主昨晚有事所以没学专业课&#xff0c;白天学了其他科&#xff0c;但是觉得不太好写博客&#xff0c;就合在今天一起写好了。 1 专业课408 学习时间&#xff1a;3h30min学习内容&#xff1a; 今天把内存管理部分剩下的关于分页分段和段…...

Java 富文本转word

前言&#xff1a; 本文的目的是将传入的富文本内容(html标签&#xff0c;图片)并且分页导出为word文档。 所使用的为docx4j 一、依赖导入 <!-- 富文本转word --><dependency><groupId>org.docx4j</groupId><artifactId>docx4j</artifactId&…...

多模态大语言模型arxiv论文略读(四十三)

InteraRec: Screenshot Based Recommendations Using Multimodal Large Language Models ➡️ 论文标题&#xff1a;InteraRec: Screenshot Based Recommendations Using Multimodal Large Language Models ➡️ 论文作者&#xff1a;Saketh Reddy Karra, Theja Tulabandhula …...

GPU加速-系统CUDA12.5-Windows10

误区注意 查看当前系统可支持的最高版本cuda&#xff1a;nvidia-smi 说明&#xff1a; 此处显示的12.7只是驱动对应的最高版本&#xff0c;不一定是 / 也不一定需要是 当前Python使用的版本。但我们所安装的CUDA版本需要 小于等于它&#xff08;即≤12.7&#xff09;因此即使…...

kafka课后总结

Kafka是由LinkedIn开发的分布式发布 - 订阅消息系统&#xff0c;具备高吞吐量、低延迟、可扩展性、持久性、可靠性、容错性和高并发等特性。其主要角色包括Broker、Topic、Partition、Producer、Consumer、Consumer Group、replica、leader、follower和controller。消息系统中存…...

排序算法(快排+推排序+归并排序)

一、快排&#xff08;不稳定O(NlogN)&#xff09; 分治思想&#xff0c;随机选一个数作为pivot&#xff0c;然后放到数组最后去&#xff0c;比这个元素小的放左边&#xff0c;比这个元素大的放右边。最后再交换左边放完后的下一个元素和pivot&#xff0c;这样就把一个元素排好…...

【股票系统】使用docker本地构建ai-hedge-fund项目,模拟大师炒股进行分析。人工智能的对冲基金的开源项目

股票系统: https://github.com/virattt/ai-hedge-fund 镜像地址: https://gitcode.com/gh_mirrors/ai/ai-hedge-fund 项目地址: https://gitee.com/pythonstock/docker-run-ai-hedge-fund 这是一个基于人工智能的对冲基金的原理验证项目。本项目旨在探讨利用人工智能进行…...

施工安全巡检二维码制作

进入新时代以来&#xff0c;人们对安全的重视程度越来越高。特别在建筑施工行业&#xff0c;安全不仅是关乎着工人的性命&#xff0c;更是承载着工人背后家庭的幸福生活。此时就诞生了安全巡检的工作&#xff0c;而巡检过程中内容庞杂&#xff0c;安全生产检查、隐患排查、施工…...

什么是函数依赖中的 **自反律(Reflexivity)**、**增广律(Augmentation)** 和 **传递律(Transitivity)?

文章目录 1. 自反律&#xff08;Reflexivity Rule&#xff09;规则定义实际例子应用意义 2. 增广律&#xff08;Augmentation Rule&#xff09;规则定义实际例子应用意义 3. 传递律&#xff08;Transitivity Rule&#xff09;规则定义实际例子应用意义 综合应用场景&#xff1a…...

基于 Google Earth Engine (GEE) 的土地利用变化监测

一、引言 土地利用变化是全球环境变化的重要组成部分&#xff0c;对生态系统、气候和人类社会产生深远影响。利用遥感技术可以快速、准确地获取土地利用信息&#xff0c;监测其变化情况。本文将详细介绍如何使用 GEE 对特定区域的 Landsat 影像进行处理&#xff0c;实现土地利…...

Java基础语法10分钟速成

Java基础语法10分钟速成&#xff0c;记笔记版 JDKhello world变量字符串 类&#xff0c;继承&#xff0c;多态&#xff0c;重载 JDK JDK即Java development key&#xff0c;Java环境依赖包 在jdk中 编译器javac将代码的Java源文件编译为字节码文件&#xff08;.class&#xff…...

如何在Spring Boot中实现热加载以避免重启服务器

在 Spring Boot 开发中&#xff0c;频繁修改代码&#xff08;如 Java 类、配置文件或静态资源&#xff09;通常需要重启服务器&#xff0c;这会中断开发流程并降低效率。热加载&#xff08;Hot Reloading&#xff09;允许开发者在不重启服务器的情况下重新加载更改&#xff0c;…...

BT169-ASEMI无人机专用功率器件BT169

编辑&#xff1a;ll BT169-ASEMI无人机专用功率器件BT169 型号&#xff1a;BT169 品牌&#xff1a;ASEMI 封装&#xff1a;SOT-23 批号&#xff1a;最新 引脚数量&#xff1a;3 特性&#xff1a;单向可控硅 工作温度&#xff1a;-40℃~150℃ BT169单向可控硅&#xff…...

C++学习笔记(三十六)——STL之排序算法

一、STL 算法 C的STL&#xff08;Standard Template Library&#xff09; 提供了一组高效、通用的算法&#xff0c;这些算法适用于各种容器&#xff08;如 vector、list、set、map&#xff09;。 这些算法主要位于 <algorithm> 和 <numeric> 头文件中。 通用性&a…...

AI图像编辑器 Luminar Neo 便携版 Win1.24.0.14794

如果你对图像编辑有兴趣&#xff0c;但又不想花费太多时间学习复杂的软件操作&#xff0c;那么 Luminar Neo 可能就是你要找的完美工具。作为一款基于AI技术的创意图像编辑器&#xff0c;Luminar Neo简化了复杂的编辑流程&#xff0c;即使是没有任何图像处理经验的新手&#xf…...