我理解 Spring 框架中的 @PathVariable
、@RequestParam
和 @RequestBody
的作用,但不清楚在哪种场景下需要使用它们,因为它们都用于从 URI 提取值。为什么我们要像这样发送数据:localhost:8080/getBooks/time 和 localhost:8080/getBooks?book=time。
我理解 Spring 框架中的 @PathVariable
、@RequestParam
和 @RequestBody
的作用,但不清楚在哪种场景下需要使用它们,因为它们都用于从 URI 提取值。为什么我们要像这样发送数据:localhost:8080/getBooks/time 和 localhost:8080/getBooks?book=time。
示例 1:
@RequestParam
主要用于过滤目的
假设您想获取George Martin的书:
GET localhost:8080/books?author=georgemartin
这里我们将 author=georgemartin
作为请求参数传递。这将会获取Martin的所有书籍,例如《权游》系列。
这主要用于 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操作。
@PathVariable
用于路径的一部分(例如:/person/{id})。
@RequestParam
用于获取 GET 请求中的查询参数(例如:/person?name="Bob")。
@RequestBody
用于请求的实际主体部分。
@RequestBody 在POST请求中使用,而@RequestParam和@PathVariable在GET请求中使用
@RequestParam:从查询字符串中提取值,用于过滤、排序和分页。在请求参数中,值可以被加密。例如:localhost:8080/getBooks?start=1&end=100
@PathVariable:从URI路径中提取值,在路径变量中,值无法被编码。它用于根据值获取数据。
Reference: https://www.baeldung.com/spring-requestparam-vs-pathvariable