繁体   English   中英

@PathVariable、@RequestParam 和 @RequestBody 之间的区别

[英]Difference between @PathVariable, @RequestParam, and @RequestBody

我了解@PathVariable@RequestParam@RequestBody在 Spring 中的作用,但不清楚我们必须在哪些场景中使用它们,因为它们用于从 URI 中提取值。 为什么我们必须发送像 localhost:8080/getBooks/time 和 localhost:8080/getBooks?book=time 这样的数据。

示例 1:
@RequestParam主要用于过滤目的假设您想获得 George Martin 的书:
GET localhost:8080/books?author=georgemartin
这里我们传递author=georgemartin作为请求参数。 这应该会得到马丁的所有书籍,例如权力的游戏系列。 这将主要用于 GET 操作。

示例 2:
@PathVariable主要用于获取单个对象或数据片段假设您想通过其 id 获取一本书:
GET localhost:8080/books/1
这里我们传递 1 作为路径变量。 这应该会得到 id 为 1 的 1 本书,例如权力的游戏书的第一部分。 这将主要用于 DELETE/GET 操作。

示例 3:
@RequestBody主要用于保存对象(或数据)假设您要添加一本书:
POST localhost:8080/books/请求正文具有以下属性:

{
  "author":"George Martin",
  "Book":"Game of thrones"
  ...
  ...
}

这将向数据库添加一本书。 这将主要用于 PUT/POST 操作。


注意:不要使用动词命名端点,而是使用复数名词。 因此,books/ 是理想的,而不是 getbooks/。
参考/阅读更多:
https://stackoverflow.blog/2020/03/02/best-practices-for-rest-api-design/#h-use-nouns-instead-of-verbs-in-endpoint-paths
https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/web/bind/annotation/RequestBody.ZFC35FDC70D5FC69D26EZ83A83A8
https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/web/bind/annotation/RequestParam.ZFC35FDC70D5FC69D226EZ83A8
https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/web/bind/annotation/PathVariable.ZFC35FDC70D52FC69D269E883A8A8

@PathVariable用于部分路径(即/person/{id})

@RequestParam用于 GET 查询参数(即 /person?name="Bob")。

@RequestBody用于请求的实际正文。

@RequestBody 与 POST 动词一起使用,而 @RequestParam 和 @pathVariable 与 GET 动词一起使用

@RequstParam:它从用于过滤、排序和分页的查询字符串中提取值在请求参数中,值可以加密 localhost:8080/getBooks?start=1&end=100

@pathVariable:它从URI路径中提取值在路径变量中,值不能被编码它用于根据值获取数据

参考: https://www.baeldung.com/spring-requestparam-vs-pathvariable

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM