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

Spring Boot中的路径变量

在Spring Boot中,路径变量(Path Variable)通过 @PathVariable 注解实现URL参数与方法参数的绑定,是构建RESTful API的核心工具。

一. 基本用法与参数映射

1.路径定义

在URL路径中用 {} 包裹变量名,例如:

@GetMapping("/users/{userId}")

2.参数绑定

  • - 默认映射:当参数名与路径变量名一致时,可以省略路径变量名 ,例如:
@GetMapping("/users/{userId}")public User getUser(@PathVariable Long userId) {// 业务逻辑}

  • - 显式指定:若参数名与变量名不同,通过 @PathVariable("变量名") 指定,例如:
@GetMapping("/users/{userId}")public User getUserById(@PathVariable("userId") Long id) {// 业务逻辑}

 二.多参数接收

在方法中多次使用 @PathVariable 接收多个参数,例如:

@GetMapping("/users/{userId}/orders/{orderId}")

public Order getOrder(

    @PathVariable Long userId,

    @PathVariable Long orderId) {

    // 业务逻辑

}

三、类型转换

  • - 自动转换:Spring Boot会自动将路径变量的字符串值转换为方法参数的类型,支持基本数据类型(如 int 、 long )、包装类(如 Integer 、 Long )、 String 等。

  • - 异常处理:若类型转换失败,Spring Boot会抛出 TypeMismatchException 异常,可通过自定义异常处理器进行处理。

四. 可选参数与默认值

 1.非必填参数

通过 @PathVariable(required = false) 设置参数为可选,未传值时参数值为 null ,例如:

@GetMapping("/users/{id}/info")public UserInfo getUserInfo(@PathVariable("id") Long id,@PathVariable(required = false) String type) {// 业务逻辑}

 2.默认值设置

使用 @PathVariable(defaultValue = "默认值") 指定默认值,当未传值时使用该默认值,例如:

@GetMapping("/page/{pageNum}")public List<User> getUsers(@PathVariable(defaultValue = "1") int pageNum) {// 业务逻辑}

五. 正则表达式约束

通过 {变量名:正则表达式} 限制参数格式,例如:

@GetMapping("/images/{name:\\d{4}-\\d{2}-\\d{2}\\.jpg}") // 匹配YYYY-MM-DD.jpg格式public Image getImage(@PathVariable String name) {// 业务逻辑}

 六、总结

路径变量是 Spring Boot 中构建 RESTful API 的重要工具,通过 @PathVariable 注解实现 URL 参数与方法参数的绑定。它支持多种功能,包括:​单个和多个路径变量的接收。​自动类型转换和异常处理。​可选参数和默认值的设置。​正则表达式约束,用于限制参数格式

http://www.lryc.cn/news/586804.html

相关文章:

  • INA226 数据手册解读
  • 13.使用NiN网络进行Fashion-Mnist分类
  • macOS - Chrome 关闭自动更新
  • Python 的 MRO
  • [办公及工程版浏览器]_Google Chrome 138.0.7204.101全屏启动插件
  • es里为什么node和shard不是一对一的关系
  • 香港理工大学实验室定时预约
  • 前端框架状态管理对比:Redux、MobX、Vuex 等的优劣与选择
  • 关于 java:11. 项目结构、Maven、Gradle 构建系统
  • 用 Node.js 构建模块化的 CLI 脚手架工具,从 GitHub 下载远程模板
  • Python 学习之路(十)--常见算法实现原理及解析
  • LabVIEW调用外部DLL
  • [CH582M入门第六步]软件IIC驱动AHT10
  • 【数据结构】图 ,拓扑排序 未完
  • Docker(02) Docker-Compose、Dockerfile镜像构建、Portainer
  • 快速生成 Android 的 Splash 的 9 Patch 图片
  • Docker 搭建本地Harbor私有镜像仓库
  • SpringBoot单元测试类拿不到bean报空指针异常
  • 从架构到代码:飞算JavaAI电商订单管理系统技术解构
  • 决策树的相关理论学习
  • FusionOne HCI 23 超融合实施手册(超聚变超融合)
  • 【C++】多线程同步三剑客介绍
  • 代码随想录算法训练营第十七天
  • 【C++】第十五节—一文详解 | 继承
  • JVM 垃圾收集算法全面解析
  • DC-DC变换器最基本拓扑 -Buck电路和Boost电路
  • ROS2---NodeOptions
  • MacOS使用Multipass快速搭建轻量级k3s集群
  • mac上BRPC的CMakeLists.txt优化:解决Protobuf路径问题
  • TensorFlow深度学习实战(24)——变分自编码器详解与实现