@RequestParam 和 @PathVariable 有啥区别 [重复]

Posted

技术标签:

【中文标题】@RequestParam 和 @PathVariable 有啥区别 [重复]【英文标题】:What is the difference between @RequestParam and @PathVariable [duplicate]@RequestParam 和 @PathVariable 有什么区别 [重复] 【发布时间】:2018-05-05 15:23:15 【问题描述】:

我的理解是请求参数是方法传递所需的id,而路径变量说这个变量应该在请求过程中找到

   @PreAuthorize("hasRole('ROLE_COACH')")

    @PostMapping(value = "/courses/courseId/background/update")

    @ResponseStatus(HttpStatus.ACCEPTED)

    @ResponseBody

    public CourseLiteInfo updateBackground(@RequestParam("file") MultipartFile file,

                                           @PathVariable(value = "courseId") Long courseId) throws IOException 



        return new CourseLiteInfo(courseService.updateBackground(courseId, file));

【问题讨论】:

【参考方案1】:

@RequestParam 是绑定为查询参数的参数。例如,此参数可以是可选的以应用过滤器。

google.com?query=param

@PathVariable 是绑定为 url 中的参数的参数。这个参数是需要告知的。

yourapp.com/users/pathparam

【讨论】:

【参考方案2】:

RequestParam 映射到 URL 上的命名 URL 参数。

PathVariable 是 URL 路径的一部分,可以更改但仍映射到相同的控制器映射

例如

http://somedomain.com/account/123/details?type=sometype

这里的 123 是一个 PathVariable,可以命名为任何我们想要的名称,而 sometype 是 RequestParam 的值,它必须是名称类型。

【讨论】:

【参考方案3】:

@QueryParam 用于访问 URL 的查询字符串中的键/值对(? 后面的部分)。例如在urlhttp://***.com/questions?q=query中,可以使用@QueryParam("q") 来获取q的值。

@PathParam 用于匹配 URL 的一部分作为参数。例如,在http://***.com/questions/questionid 形式的 url 中,您可以使用 @PathParam("questionid") 获取问题的 id

【讨论】:

所以 QueryParam 等于 RequestParam 而 PathVariable 是 PathParam ? 是的,检查一下***.com/questions/13715811/…

以上是关于@RequestParam 和 @PathVariable 有啥区别 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

@RequestBody和@RequestParam区别

@RequestBody和@RequestParam区别

@RequestBody 和 @RequestParam 有啥区别?

@RequestParam@RequestBody和@ModelAttribute区别

@RequestParam@RequestBody和@ModelAttribute区别

@PathVariable注解和@RequestParam注解的区别