HTTP 与 SpringBoot 参数提交与接收协议方式
HTTP 协议支持多种参数提交方式,主要取决于请求方法(Method)和内容类型(Content-Type)。
以下是主要的参数提交协议:
1. URL 查询参数 (Query Parameters)
-
请求方法: GET (也可用于其他方法)
-
格式:
?key1=value1&key2=value2
-
示例:
GET /users?id=123&name=John
-
获取方式:
-
SpringBoot:
@RequestParam
-
Servlet:
request.getParameter()
-
2. 表单提交 (Form Data)
-
请求方法: POST (也可用于 PUT/PATCH)
-
Content-Type:
application/x-www-form-urlencoded
或multipart/form-data
-
格式:
-
application/x-www-form-urlencoded
:key1=value1&key2=value2
(类似查询参数但在请求体中) -
multipart/form-data
: 用于文件上传,包含边界分隔符
-
-
示例:
-
获取方式:
-
SpringBoot:
@RequestParam
或@ModelAttribute
-
Servlet:
request.getParameter()
-
3. JSON 请求体 (JSON Payload)
-
请求方法: POST/PUT/PATCH/DELETE
-
Content-Type:
application/json
-
格式: JSON 对象
-
示例:
json
{ \"name\": \"John\", \"age\": 30}
-
获取方式:
-
SpringBoot:
@RequestBody
-
Servlet: 通过
request.getReader()
读取输入流
-
4. XML 请求体 (XML Payload)
-
请求方法: POST/PUT/PATCH/DELETE
-
Content-Type:
application/xml
或text/xml
-
格式: XML 文档
-
示例:
John 30
-
获取方式:
-
SpringBoot:
@RequestBody
配合 XML 解析器 -
Servlet: 通过
request.getReader()
读取输入流
-
5. RESTful 路径参数 (Path Variables)
-
请求方法: 任意方法
-
格式:
/resource/{id}
-
示例:
GET /users/123
-
获取方式:
-
SpringBoot:
@PathVariable
-
Servlet: 需要手动解析 URL
-
6. HTTP 头部参数 (Headers)
-
位置: HTTP 头部
-
示例:
Authorization: Bearer token123Accept-Language: en-US
-
获取方式:
-
SpringBoot:
@RequestHeader
-
Servlet:
request.getHeader()
-
7. Cookie 参数
-
位置: HTTP Cookie 头部
-
示例:
Cookie: sessionId=abc123; username=John
-
获取方式:
-
SpringBoot:
@CookieValue
-
Servlet:
request.getCookies()
-
8. GraphQL 查询
-
请求方法: POST/GET
-
Content-Type:
application/json
(通常) -
格式: GraphQL 查询语言
-
示例:
{ \"query\": \"{ user(id: 123) { name age } }\"}
-
获取方式: 需要专门的 GraphQL 处理器
9. WebSocket 参数
-
协议: WebSocket
-
格式: 自定义,通常为 JSON 或二进制
-
获取方式: 通过 WebSocket API 处理
10. Server-Sent Events (SSE)
-
协议: HTTP 长连接
-
Content-Type:
text/event-stream
-
格式: 特定的事件流格式
-
获取方式: 通过专门的 SSE 客户端处理
总结表
@RequestParam
@RequestParam
, @ModelAttribute
@RequestPart
@RequestBody
@RequestBody
@PathVariable
@RequestHeader
@CookieValue