如果在何时/何时不使用上述将信息传递给REST调用的方法,我一直试图找到答案。
我一直在寻找各地,但每个帖子只讨论两种列出的方法之间的差异,或3,而不是所有4。
1. @PayParam
PathParam通常用于使用它的id访问实体。例如。 /employees/{emp_id}
通常,如果您没有通过它的id作为路径参数找到实体,那么它就是HTTP响应代码404。
2. @QueryParam
QueryParam通常用于使用除id之外的任何其他字段来访问实体。想想“搜索”或“过滤”而不是使用“id”来到达实体。在这种情况下,您将不得不期望一组实体作为响应,而不像您将获得的单个实体作为发送id作为pathParam的响应
防爆。 /employees?firstname=joe
注意:QueryParam
也可以用于其他操作,例如sort
。例如。 /departments/123/employees?sort_by=salary
通常它是一个http响应代码200,如果没有通过搜索参数或过滤器参数找到任何实体,则将空数组作为响应主体。
3. @RequestBody
通常它是一个POST,PUT或PATCH http动词,我们将用它来发送请求者。
Why it's a bad idea to send requestbody with http GET
Why it's a bad idea to send requestbody with http DELETE
国家突变
为了实现状态变异,通常json / xml表示实体的所需状态将作为requestBody
与POST / PUT / PATCH动词一起发送。 Rest原则没有说json或xml,它可以是任何东西;它可以是压缩的二进制格式,如protobuf,avro,cap'n'proto等,甚至也可以是纯文本。
READ操作(这些是READ不等同于HTTP GET的示例)
4. @RequestHeader
通常用于发送元数据;不是实际的实体(数据)。例如。 request-correlation-id,authheader等
5. @Matrixparam,@ CookieParam等
在JAX-RS规范中还有其他不那么受欢迎的HTTP动词,如@Matrixparam和@CookieParam。这是Jersey documentation(请记住,Jersey是JAX-RS的参考实现。你可能会或可能不会在Spring中找到相同的/等效的)
When to use @QueryParam vs @PathParam
What is the difference between @PathParam and @QueryParam
HTTP POST with URL query parameters -- good idea or not?
How to POST JSON data with Curl from Terminal/Commandline to Test Spring REST?