典型用法

基础用法

@GetMapping("/users/{id}")
public String getUser(@PathVariable Long id) {return "User ID: " + id;
}
请求:/users/1001
输出:User ID: 1001----
@GetMapping("/users/{userId}/orders/{orderId}")
public String getOrder(@PathVariable("userId") Long userId,@PathVariable("orderId") Long orderId) {return "User: " + userId + ", Order: " + orderId;
}
请求:/users/1001/orders/2002
输出:User: 1001, Order: 2002

路径变量与类型转换

Spring 自动进行类型转换(如 String → Integer、String → Long 等):

@GetMapping("/products/{id}")
public String getProduct(@PathVariable Integer id) {return "Product ID: " + id;
}
请求:/products/3003
输出:Product ID: 3003

使用 Map 接收所有路径变量

当不确定路径变量名称或需要动态处理时,可以使用 Map:

@GetMapping("/books/{category}/{bookId}")
public String getBookInfo(@PathVariable Map<String, String> pathVars) {return "Category: " + pathVars.get("category") + ", Book ID: " + pathVars.get("bookId");
}
请求:/books/fiction/978123
输出:Category: fiction, Book ID: 978123

路径变量不必须存在

Spring 的 @PathVariable 注解 默认要求路径变量必须存在,否则会抛出异常(如 NoHandlerFoundException)

@GetMapping("/posts/{id}")
public String getPost(@PathVariable Long id) {return "Post ID: " + id;
}请求 /posts/123 ✅ 正常
请求 /posts ❌ 报错:找不到匹配的路径
// ✅方法一:使用多个路径映射(推荐)
@GetMapping({"/posts", "/posts/{id}"})
public String getPost(@PathVariable(required = false) Long id) {if (id == null) {return "访问所有文章列表";}return "访问文章详情,ID: " + id;
}
请求 /posts → 输出:访问所有文章列表
请求 /posts/123 → 输出:访问文章详情,ID: 123// ✅方法二:使用 Optional(Spring 5.0+ 推荐)
@GetMapping({"/posts", "/posts/{id}"})
public String getPost(@PathVariable Optional<Long> id) {return id.map(i -> "访问文章详情,ID: " + i).orElse("访问所有文章列表");
}

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

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LVS+Keepliaved高可用群集

目录 keepalived双击热备基础知识1.keepallived概述及安装keepalived的热备方式 2.使用keepalived实现双机热备 案例1.基础主备调度器环境配置2.配置主调度器3.配置从调度器4.配置两台节点服务器5.测试 keepalived双击热备基础知识 Keepalived 起初是专门针对 LVS 设计的一款强…

在Unreal Engine 5(UE5)中,Get PlayerPawn和Get PlayerController的区别以及如何计算玩家和目标之间的距离。

一、两者区别 在Unreal Engine 5&#xff08;UE5&#xff09;中&#xff0c;获取玩家的位置信息通常有两种方式&#xff1a;通过PlayerPawn或通过PlayerController。具体使用哪一个取决于你想要获取的是哪个实体的位置。 1.Get Player Pawn&#xff1a; PlayerPawn是玩家实际…

linux线程同步

互斥锁 同步与互斥概述** 现代操作系统基本都是多任务操作系统&#xff0c;即同时有大量可调度实体在运行。在多任务操作系统中&#xff0c;同时运行的多个任务可能&#xff1a; 都需要访问/使用同一种资源 多个任务之间有依赖关系&#xff0c;某个任务的运行依赖于另一个任…

Spring 的IoC 和 AOP

第一部分&#xff1a;关于 IoC (控制反转) 1. 核心思想 (What & Why) 首先&#xff0c;我会先解释 IoC 的核心思想&#xff0c;而不是直接讲技术。 “IoC&#xff0c;即控制反转&#xff0c;它是一种重要的设计思想&#xff0c;而不是一个具体的技术。它的核心是将传统上…

[实战] Windows 文件读写函数 `ReadFile()` 和 `WriteFile()` 的阻塞与非阻塞操作详解(含完整C语言示例)

Windows 文件读写函数 ReadFile() 和 WriteFile() 的阻塞与非阻塞操作详解&#xff08;含完整C语言示例&#xff09; 在 Windows 平台进行文件或设备&#xff08;如串口、管道&#xff09;编程时&#xff0c;ReadFile() 和 WriteFile() 是最常用的两个 API 函数。它们既可以以…

Singularity 安装

Singularity 是什么? 核心功能:用于创建/运行容器(将应用+依赖打包的独立环境)。 与 Docker 的区别:专为 HPC(高性能计算)设计,无需后台守护进程,支持非 root 运行容器(但安装本身需 root 权限)。 适用于在具有 root 权限的计算机上从源代码安装 Singularity。…

辩证视角下 “辫子戏” 的文化反思与价值重构

前阵子播出的《人生若如初见》刻意美化晚清封建统治阶级&#xff0c;淡化甚至掩盖清政府闭关锁国、丧权辱国、残酷压迫民众等历史真相&#xff0c;将本应批判反思的腐朽统治包装成值得歌颂的对象&#xff1b;在历史叙事上&#xff0c;或通过虚构、篡改重要历史事件和人物形象&a…

MCP-server

&#x1f4a1; 说明&#xff1a;该模块是 MCP 服务器的 数据中继层&#xff0c;确保安全高效地从分布式来源获取模型及其上下文&#xff0c;适用于边缘计算和联邦学习场景。若要查看完整代码&#xff0c;建议直接访问 GitHub 链接

第3讲、LangChain性能优化:上下文缓存与流式响应实战指南

目录 概述上下文缓存优化流式响应优化复杂对话场景性能优化用户体验优化策略完整实现示例性能监控与调优总结 概述 在复杂对话场景中&#xff0c;大型语言模型面临着响应延迟、重复计算、上下文管理等挑战。本文将详细介绍如何通过LangChain的上下文缓存和流式响应功能来优化…

http中GET和POST、PUT之间的区别

在HTTP协议中&#xff0c;GET、POST和PUT是三种最常用的请求方法&#xff0c;它们的主要区别如下&#xff1a; 1. GET 用途&#xff1a;用于请求资源&#xff08;查询数据&#xff09;&#xff0c;不应修改服务器状态。 参数传递&#xff1a;通过URL的查询字符串&#xff08;…

埃夫特各种系列机器人运动学建模、轨迹规划和工作空间求解

要求&#xff1a; 1.理论分析 1.1 正向运动学&#xff1a;根据D-H法完成机器人的正向运动学&#xff08;数学建模后基于Matlab计算公式&#xff09;&#xff1b; 1.2 工作空间分析&#xff1a;根据正向运动学结果&#xff0c;运用 MATLAB进行工作空间分析&#xff0c;完成工…

VUE3 路由的跳转方法

Routerlink跳转方法 name属性对应了路由文件配置的name path属性对应了路由的路径 <RouterLink to"/login">点击跳转登陆</RouterLink> <RouterLink :to"{name:login}">点击跳转登陆</RouterLink> <RouterLink :to"{pat…

数据库中间件ShardingSphere5

一、高性能架构模式 数据库集群&#xff0c;第一种方式“读写分离”&#xff0c;第二种方式“数据库分片”。 1.1 读写分离架构 读写分离原理&#xff1a;将数据库读写操作分散到不同的节点上。 读写分离的基本实现&#xff1a; 主库负责处理事务性的增删改操作&#xff0c…

C++11 右值引用(Rvalue Reference)

在 C++11 中,右值引用(Rvalue Reference) 是一个革命性的语言特性,它为现代 C++ 的性能优化、资源管理以及语义清晰化奠定了基础。通过引入 T&& 语法,C++11 支持了 移动语义(Move Semantics) 和 完美转发(Perfect Forwarding),极大地提升了程序效率和代码表达…

skynet源码学习-skynet_main入口

skynet源码学习-skynet_main入口 核心功能与启动流程Shell脚本启动示例main函数参数处理其他相关联函数解析1. 配置加载器解析2. 环境变量设置3. 配置解析函数 核心配置项解析典型配置文件分析服务启动与运行核心服务启动流程完整启动时序图 核心功能与启动流程 Skynet 的启动…

前端图文混排页面一键导出PDF最佳实践 —— 以Vue3+html2pdf.js为例

前言 在现代管理系统中,数据的归档、分享和线下流转需求日益增长。如何将前端页面的图文内容高质量导出为PDF,成为许多企业和开发者关注的技术点。本文以实际项目为例,系统梳理前端导出PDF的完整实现思路与优化经验。 一、项目背景与需求分析 1.1 背景故事 在某管理系统的…

19|Whisper+ChatGPT:请AI代你听播客

今天&#xff0c;我们的课程开始进入一个新的主题了&#xff0c;那就是语音识别。过去几周我们介绍的ChatGPT虽然很强大&#xff0c;但是只能接受文本的输入。而在现实生活中&#xff0c;很多时候我们并不方便停下来打字。很多内容比如像播客也没有文字版&#xff0c;所以这个时…

linux常用设置

1&#xff0c;ubuntu设置ssh-agent进入shell时自动加载 一&#xff0c;添加自动加载脚本&#xff0c;vim /etc/profile.d/keychain.sh # /etc/profile.d/keychain.sh # 自动启动 ssh-agent 并加载多个私钥 export KEYCHAIN_HOME"/root/.keychain" # 多个key&#xf…

电子电气架构 --- 软件供应商如何进入OEM体系

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 简单,单纯,喜欢独处,独来独往,不易合同频过着接地气的生活,除了生存温饱问题之外,没有什么过多的欲望,表面看起来很高冷,内心热情,如果你身…

破解数据可视化难题:带轴断裂的柱状图绘制全指南

引言&#xff1a;当数据跨度让图表失真时&#xff0c;轴断裂技术如何力挽狂澜&#xff1f; 在数据可视化的世界里&#xff0c;我们常常会遇到这样的困境&#xff1a;一组数据中既有 "巨无霸" 般的极端值&#xff0c;又有需要精细展示的小数据。比如在财务报表中&…