首页 > 其他分享 >@RequestParam 和 @PathVariable 的区别

@RequestParam 和 @PathVariable 的区别

时间:2024-12-05 13:04:32浏览次数:7  
标签:PathVariable RequestParam 区别 URL filename 参数 download

@RequestParam 和 @PathVariable 都是 Spring MVC 中用于从 HTTP 请求中提取参数的注解,但它们的作用和使用场景有所不同。


一.@RequestParam


作用:从请求的查询参数(query parameters)或表单数据(form data)中提取参数。
使用场景:适用于 URL 中的查询参数或 POST 请求中的表单数据。
示例
假设有一个 URL:http://example.com/download?filename=template.xlsx

@GetMapping("/download")
public ResponseEntity<Resource> downloadFile(@RequestParam("filename") String filename) throws IOException {
    // 方法体
}

@RequestParam("filename") String filename:从请求的查询参数中提取名为 filename 的参数,并将其赋值给方法参数 filename。

二.@PathVariable


作用:从请求的 URL 路径中提取参数。
使用场景:适用于 URL 路径中的占位符。
示例
假设有一个 URL:http://example.com/download/template.xlsx

@GetMapping("/download/{filename}")
public ResponseEntity<Resource> downloadFile(@PathVariable("filename") String filename) throws IOException {
    // 方法体
}

@PathVariable("filename") String filename:从请求的 URL 路径中提取名为 filename 的占位符,并将其赋值给方法参数 filename。

三.区别总结


参数来源:


@RequestParam:从请求的查询参数或表单数据中提取。
@PathVariable:从请求的 URL 路径中提取。


URL 格式:


@RequestParam:URL 中的查询参数,如 http://example.com/download?filename=template.xlsx。
@PathVariable:URL 路径中的占位符,如 http://example.com/download/template.xlsx。
使用场景:
@RequestParam:适用于需要传递多个查询参数的场景,或者参数不是路径的一部分。
@PathVariable:适用于路径中包含动态部分的场景,如 RESTful API 设计。

四.示例对比

1.使用 @RequestParam

@GetMapping("/download")
public ResponseEntity<Resource> downloadFile(@RequestParam("filename") String filename) throws IOException {
    // 方法体
}

URL:http://example.com/download?filename=template.xlsx


2.使用 @PathVariable

@GetMapping("/download/{filename}")
public ResponseEntity<Resource> downloadFile(@PathVariable("filename") String filename) throws IOException {
    // 方法体
}

URL:http://example.com/download/template.xlsx
总结
@RequestParam:用于从查询参数或表单数据中提取参数。
@PathVariable:用于从 URL 路径中提取参数。
选择合适的注解可以使代码更清晰、更易于维护,并且能够正确地解析请求参数。

标签:PathVariable,RequestParam,区别,URL,filename,参数,download
From: https://blog.csdn.net/2401_85943192/article/details/144263723

相关文章

  • (面试常考)Java基础 - 接口与抽象类的区别
    接口接口(Interface)的传统定义是只能包含抽象方法(即没有方法体的方法)以及常量。但是从Java8开始,接口可以包含非抽象方法了。这些非抽象方法包括:默认方法(DefaultMethods):使用default关键字声明的方法。它们允许在接口中提供一个方法的默认实现,这样实现了该接口的类可......
  • json和对象有什么区别?
    在前端开发中,JSON和JavaScript对象(Object)容易混淆,但它们是不同的。主要区别在于:JSON是一种文本格式:JSON(JavaScriptObjectNotation)是一种轻量级的数据交换格式。它本质上是一个字符串,用于表示结构化数据。你可以把它想象成一种用于在不同系统之间传输数据的语言......
  • 在设置keyup监听事件后按F5刷新和按浏览器中刷新键刷新有什么区别?
    在前端开发中,使用keyup监听事件后,按F5刷新和点击浏览器刷新按钮,虽然最终结果都是刷新页面,但在某些情况下会有一些细微的差别:1.触发事件的时机:F5(或Ctrl+R/Cmd+R):直接触发浏览器的刷新机制,并不会触发keyup事件。因为keyup事件是在按键释放时触发的,而按下F5并不会释放,而是......
  • 你知道pass、sass、lass的区别是什么吗?
    在前端开发中,Pass、Sass和Less都是CSS预处理器,它们扩展了CSS的功能,使编写和维护样式表更加容易。它们的主要区别在于语法、功能和编译方式:Sass(SyntacticallyAwesomeStyleSheets):语法:Sass提供两种语法:SCSS(SassyCSS)和缩进语法(IndentedSyntax)。SCSS使用......
  • 解释下深度优先遍历和广度优先遍历的区别及如何实现
    深度优先遍历(DFS)和广度优先遍历(BFS)都是图和树数据结构的遍历算法,它们的主要区别在于访问节点的顺序。深度优先遍历(DFS)概念:DFS就像走迷宫一样,沿着一条路走到底,遇到死胡同再回溯到上一个岔路口,选择另一条路继续走,直到遍历完所有节点。它优先探索当前节点的分支,尽......
  • java中面向过程和面向对象区别?
    重要信息官网:https://ais.cn/u/vEbMBz......
  • TikTok个人号和企业号有何区别?
    您知道TikTok这两种帐户类型之间的区别吗?在此文中,我们将比较TikTok个人帐户和企业帐户,并研究每种帐户类型的优缺点。无论您是TikTok创作者、影响者还是企业主,这篇博文将给你分析,哪种账号类型更值得你运营。一、什么是TikTok个人帐号?个人帐户是TikTok上的默认帐户类型......
  • TikTok个人号和企业号区别与分别运营策略
    您知道TikTok这两种帐户类型之间的区别吗?在此文中,我们将比较TikTok个人帐户和企业帐户,并研究每种帐户类型的优缺点。无论您是TikTok创作者、影响者还是企业主,这篇博文将给你分析,哪种账号类型更值得你运营。一、什么是TikTok个人帐号?个人帐户是TikTok上的默认帐户类......
  • @pathvariable Interger Id 和(@pathvariable ("id") Interger Id )
     在SpringMVC中,@PathVariable注解用于将URI模板中的变量映射到控制器handler方法的参数中。这个注解通常用于获取URL中的参数值。@PathVariable注解可以指定一个名称的属性,这个属性对应URL的那部分是可变的。当我们在URL中使用一些变量值的时候,可以通过@PathVariable来获取这些......
  • Handler在有屏障消息和没有屏障消息时的区别
    在Android的消息处理机制中,MessageQueue扮演着关键角色,负责管理和调度消息的执行顺序。Looper通过不断调用MessageQueue的next()方法,从队列中取出消息并分发给相应的Handler进行处理。理解next()方法在有屏障消息和没有屏障消息时的不同处理流程,对于优化应用性能、避......