【spring】@PathVariable注解学习

news/2024/9/20 13:29:52

@PathVariable介绍

@PathVariable是Spring框架中的一个注解,主要用于处理RESTful风格URL中的路径变量。在RESTful接口设计中,我们经常将资源的ID或者其他标识信息直接放在URL路径中,而不是作为查询参数。@PathVariable注解使得控制器方法能够轻松地从URL中提取这些变量值,并将其绑定到方法参数上。

@PathVariable源码

@Target(ElementType.PARAMETER)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface PathVariable {

	@AliasFor("name")
	String value() default "";

	@AliasFor("value")
	String name() default "";

	boolean required() default true;

}
源代码截图

@PathVariable属性介绍

  • value/name属性:
    • 这两个属性是等效的(通过@AliasFor注解标明),用于指定路径变量的名称。在URL模板中定义的路径变量名称需要与这里的值相匹配。例如,如果URL模板是/users/{userId},那么你可以使用@PathVariable("userId")来绑定它。默认情况下,如果不提供此属性值,Spring会尝试将方法参数名作为路径变量名去匹配URL中的路径段。
  • required属性:
    • 此属性指示路径变量是否为必须的,默认值为true。如果设置为true,则在请求的URL中必须包含对应的路径变量,否则Spring MVC会认为没有找到合适的处理器方法。如果设置为false,则该路径变量是可选的,但这在实际应用中较少见,因为通常路径变量是RESTful接口设计中不可或缺的部分。

@PathVariable注解使用场景

  1. 使用场景:当 URI 中包含动态部分时,如 /users/{userId},其中 {userId} 是动态的,你可以通过 @PathVariable 来获取这个值。

  2. 参数类型@PathVariable 可以用于方法参数,将 URI 中的变量传递给控制器。

  3. 类型转换:Spring MVC 会尝试将路径变量转换为方法参数的类型。例如,如果路径变量是字符串,而方法参数是整数类型,Spring 会尝试将字符串转换为整数。

  4. 默认值:你可以为 @PathVariable 提供一个默认值,如果路径变量不存在,将使用这个默认值。

  5. URI 模板@PathVariable 通常与 @RequestMapping@GetMapping@PostMapping 等注解一起使用,这些注解定义了请求映射的 URI 模式。

  6. 嵌套路径变量@PathVariable 可以用于嵌套控制器方法中,以获取更深层次的路径变量。

  7. 占位符:在方法参数中,你可以使用 {variable} 作为占位符来引用 @PathVariable

@PathVariable测试示例代码

示例代码 一
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/demo")
public class UserController {

    @GetMapping("/{userId}")
    public String getUserById(
        @PathVariable("userId") String id, 
        @PathVariable(name = "userId", required = false) Integer optionalId
    ) {
        // 使用 id 获取用户信息
        if (optionalId != null) {
            // 如果 optionalId 存在,也可以使用它进行某些操作
        }
        return "User with ID: " + id;
    }
}





http://lihuaxi.xjx100.cn/news/2178304.html

相关文章

【2.文件和目录相关(下)】

一、查看文件内容命令 1、cat 文件名:用于显示文件内容,比如 cat test.c。 (1)cat -b test.c 表示加行号显示文件内容。 (2)cat -s test.c 表示多个空行合并成一个空行显示。 2、nl 文件名:…

el-transfer和el-tree进行结合搞一个树形穿梭框

由于业务需求需要在穿梭框里使用树形结构,但是本身element里并不支持,于是参考了别的大佬发的文章作为思路及后续自己新增了一些处理功能。 目录 1.拷贝代码放到自己的项目目录中 2.改造el-transfer的源码 3.修改tree-transfer-panel.vue文件 4.修改…

matlab工具使用记录-编辑器和命令行窗口分开还原

工具:matlab2021b 场景:在使用软件的过程中,我们误操作将matlab的编辑器单独出来了。这时候对软件进行各种操作都还原不回去。 matlab中编辑器和命令行窗口分开了如下图所示。 这时候只需要使用快捷键在编辑器窗口按CtrlshiftD,…

思科防火墙ASA Version 9.1(1) 怎么配置静态NAT,把内网ip192.168.1.10 端口1000映射到公网端口1000上?

环境: 思科防火墙5520 ASA Version 9.1(1) 问题描述: 思科防火墙ASA Version 9.1(1) 怎么配置静态NAT,把内网ip192.168.1.10 端口1000映射到公网端口1000上? 解决方案: 旧版本8.0 1.做之前要先查一下有没有端口被占用,要和业务确认2.sh Xlate | in 10011 端口 这条…

艾体宝干货 | 教程:使用ntopng和nProbe监控网络流量

本教程旨在分享如何通过 ntopng 和 nProbe 这两款工具,深入了解和掌握网络流量监控的艺术。我们将提供从基本概念到高级应用的全面指导,涵盖了在多种平台和设备上的部署和配置步骤。不论您是专业人员还是技术爱好者,跟随本教程,都…

修改vuetify3的开关组件v-switch在inset模式下的大小

<v-switchv-model"model":label"Switch: ${model.toString()}"hide-detailsinset></v-switch>使用方式1&#xff1a;本页面使用 本页面中使用&#xff0c;必须要含有lang“scss” scoped&#xff0c;才会生效 <style lang"scss"…

循环神经网络RNNLM续写“The meaning of life“

一、语料库 使用泰戈尔飞鸟集&#xff0c;作为一本英文诗集&#xff0c;用于续写The meaning of life比较好。 飞鸟集语料库如下 1 Stray birds of summer come to my window to sing and fly away. And yellow leaves of autumn, which have no songs, flutter and fall ther…

程序卡在 B.处什么原因?如何处理?(串口配置无问题,重写putc无问题,但不打印)

文章目录 前提现象&#xff1a;debug&#xff1a;原因总结 前提 为了张流量券多加更一篇&#xff0c;是我2月份遇到的问题的总结&#xff0c;在我的笔记中&#xff0c;一直没发 现象&#xff1a; 已经配置好串口但不打印输出&#xff08;printf指向串口1 的SR寄存器&#xf…