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

news2025/4/28 16:24:40

目录

      • 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);

    
}    

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

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

相关文章

刚体运动 (位置向量 - 旋转矩阵) 笔记 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;比…

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

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

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; 目录 …

开源项目实战学习之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 经过线段…

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。消息系统中存…

【股票系统】使用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;安全生产检查、隐患排查、施工…

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

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

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

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

发币流程是什么,需要多少成本?

这是一个专注于Web3相关开发的账号&#xff0c;具体会讲解步骤以及开发方案 偶尔会有科普&#xff0c;有兴趣的可以点右上角关注一下 发币&#xff08;发行数字货币&#xff09;的流程通常涉及技术实现、法律合规、经济模型设计等多个环节&#xff0c;以下是关键步骤的简要说明…

【fork初体验】

文章目录 Linux 实验&#xff1a;深入理解 fork 系统调用一、实验目的二、实验环境三、实验内容与步骤&#xff08;一&#xff09;打印进程的进程 ID 和父进程 ID1. 编写程序2. 编译与运行3. 运行结果 &#xff08;二&#xff09;使用 fork 系统调用创建进程并加入循环语句1. 编…

学习设计模式《六》——抽象工厂方法模式

一、基础概念 抽象工厂模式的本质是【选择产品簇(系列)的实现】&#xff1b; 抽象工厂模式定义&#xff1a;提供一个创建一系列相关或相互依赖对象的接口&#xff0c;而无需指定它们具体的类&#xff1b; 抽象工厂模式功能&#xff1a;抽象工厂的功能是为一系列相关对象或相互依…