處理Web請求路徑參數

目錄

1. 路徑變量(Path Variable)

2. 查詢參數(Query Parameter)

3. 表單參數(Form Data)

4. 請求體JSON參數(Request Body JSON)

5. 請求頭參數(Header Parameters)

6. 矩陣變量(Matrix Variables)

特殊:參數綁定

Content-Type(補充)

接口測試

(1) Header(請求頭參數)

(2) Query(查詢參數)

(3) Path(路徑變量)

(4) Body(請求體)

(5)binary(二進制數據)

(6)msgpack(MessagePack格式)

錯誤


1. 路徑變量(Path Variable)

寫法

@GetMapping("/users/{id}")
public ResponseEntity<User> getUserById(@PathVariable Long id) {// 業務邏輯
}

特點:

  • 使用@PathVariable注解
  • 參數直接嵌入URL路徑中
  • RESTful風格推薦使用
  • 適合必傳的、標識性的參數

ApiPost測試配置:

  • 請求URL填寫:http://localhost:8080/users/123
  • 請求方法選擇GET
  • 不需要額外參數設置

2. 查詢參數(Query Parameter)

寫法:

@GetMapping("/users")
public ResponseEntity<List<User>> getUsers(@RequestParam(required = false, defaultValue = "1") Integer page,@RequestParam(required = false, defaultValue = "10") Integer size) {// 業務邏輯
}

特點:

  • 使用@RequestParam注解
  • 參數以?key=value&key2=value2形式附加在URL后
  • 適合可選參數、過濾條件
  • 可以設置默認值和是否必需

ApiPost測試配置:

  • 請求URL填寫:http://localhost:8080/users?page=2&size=20
  • 或者使用ApiPost的"Params"選項卡添加參數:
    • 參數名:page,值:2
    • 參數名:size,值:20

3. 表單參數(Form Data)

寫法:

@PostMapping("/users")
public ResponseEntity<User> createUser(@RequestParam String username, @RequestParam String password) {// 業務邏輯
}

特點:

  • 同樣使用@RequestParam注解
  • 參數通過請求體發送(Content-Type: application/x-www-form-urlencoded)
  • 適合POST請求中的簡單參數
  • 參數不會顯示在URL中

ApiPost測試配置:

  • 請求URL填寫:http://localhost:8080/users
  • 請求方法選擇POST
  • 在"Body"選項卡中選擇"form-data"或"x-www-form-urlencoded"
  • 添加參數:
    • 參數名:username,值:user1
    • 參數名:password,值:123456

前三種方法對比

特性路徑變量查詢參數表單參數
注解@PathVariable@RequestParam@RequestParam
URL可見性路徑部分可見URL后可見不可見
主要用途資源標識過濾、分頁等可選參數POST請求的簡單參數
請求方法通常GET通常GET通常POST/PUT
參數位置URL路徑中URL問號后請求體中
適合參數類型必傳、標識性參數可選參數簡單鍵值對參數

選擇建議

  1. 路徑變量:用于標識特定資源,如/users/{id}
  2. 查詢參數:用于過濾、排序、分頁等,如/users?role=admin&page=1
  3. 表單參數:用于簡單的POST表單提交,復雜數據建議使用JSON body

4. 請求體JSON參數(Request Body JSON)

寫法:

@PostMapping("/users")
public ResponseEntity<User> createUser(@RequestBody UserDTO userDTO) {// 業務邏輯
}

特點:

  • 使用@RequestBody注解
  • 接收JSON格式的請求體(Content-Type: application/json)
  • 適合傳輸復雜的結構化數據
  • 需要定義對應的DTO類
  • 是REST API最常用的POST/PUT參數傳遞方式

ApiPost測試配置:

  • 請求URL:http://localhost:8080/users
  • 請求方法:POST
  • 在"Body"選項卡中選擇"raw"和"JSON"
  • 輸入JSON數據:
{"username": "testuser","password": "123456","email": "test@example.com"
}

5. 請求頭參數(Header Parameters)

寫法:

@GetMapping("/users")
public ResponseEntity<List<User>> getUsers(@RequestHeader("Authorization") String authToken,@RequestHeader(value = "User-Agent", required = false) String userAgent) {// 業務邏輯
}

特點:

  • 使用@RequestHeader注解
  • 從HTTP請求頭中獲取參數
  • 常用于認證令牌、設備信息等
  • 可以設置是否必需

ApiPost測試配置:

  • 請求URL:http://localhost:8080/users
  • 請求方法:GET
  • 在"Headers"選項卡中添加:
    • Authorization: Bearer xxxxxxxx
    • User-Agent: ApiPost/1.0

6. 矩陣變量(Matrix Variables)

寫法:

// 需要先啟用矩陣變量(Spring Boot默認禁用)
@Configuration
public class WebConfig implements WebMvcConfigurer {@Overridepublic void configurePathMatch(PathMatchConfigurer configurer) {configurer.setUseSuffixPatternMatch(false);configurer.setUseRegisteredSuffixPatternMatch(true);configurer.setUseTrailingSlashMatch(true);}
}// 控制器中使用
@GetMapping("/users/{id}")
public ResponseEntity<User> getUser(@PathVariable String id,@MatrixVariable(pathVar = "id") Map<String, String> matrixVars) {// 業務邏輯
}

特點:

  • 使用@MatrixVariable注解
  • URL格式:/users/id;key=value;key2=value2
  • 允許在路徑段中添加鍵值對參數
  • 需要額外配置啟用
  • 使用較少,但在某些特殊場景有用

ApiPost測試配置:

  • 請求URL:http://localhost:8080/users/123;department=IT;role=admin
  • 請求方法:GET
  • 不需要額外參數設置

六種寫法的完整對比

類型注解位置常用場景Content-Type示例URL
路徑變量@PathVariableURL路徑資源標識/users/123
查詢參數@RequestParamURL后過濾/分頁/users?page=1
表單參數@RequestParam請求體簡單表單x-www-form-urlencoded/users?(POST)
JSON參數@RequestBody請求體復雜數據application/json/users?(POST)
矩陣變量@MatrixVariableURL路徑段特殊場景/users/123;dept=IT
請求頭@RequestHeaderHTTP頭認證/元數據/users?(帶Headers)

特殊:參數綁定

可以直接用對象類接收傳遞的 Web 請求路徑參數(或查詢參數)通常稱為?"參數綁定"(Parameter Binding)?或?"對象封裝"

后端框架(如 Spring MVC)會自動將這些鍵值對映射到對象的屬性上,前提是屬性名與參數名匹配。

這種方式的優點是:

  • 避免在方法中寫大量 @RequestParam 注解。
  • 直接面向業務對象編程,更符合 OOP 思想。

注意事項

  1. 屬性名匹配:前端參數名必須與對象字段名一致(或通過注解配置映射關系)。
  2. 類型轉換:框架會自動處理簡單類型(如 String/int),但復雜類型(如日期)可能需要自定義轉換器。
  3. 嵌套對象:部分框架支持嵌套對象綁定(如 user.name=John),但需明確約定參數命名格式。

1. 查詢參數(Query Parameters)的典型形式

前端請求的 URL 通常如下:

GET /api/users?name=John&age=25&city=Beijing

?后端用對象接收:

// Spring Boot 示例
@GetMapping("/api/users")
public ResponseEntity<?> getUsers(UserQuery query) {// query 會自動封裝 name="John", age=25, city="Beijing"// ...
}// 封裝參數的對象
public class UserQuery {private String name;private Integer age;private String city;// getters/setters
}

2. 路徑參數(Path Variables)

URL 示例:

GET /api/users/123

后端對象綁定(需配合注解):

@GetMapping("/api/users/{id}")
public ResponseEntity<?> getUser(@PathVariable("id") Long id) {// 直接提取路徑參數 id=123
}// 如果用對象接收(需框架支持,如 Spring 的 @ModelAttribute):
@GetMapping("/api/users/{id}")
public ResponseEntity<?> getUser(@ModelAttribute UserQuery query) {// 需要 query 中有 id 字段
}

3. 表單數據(Form Data)

表單 POST 請求:
前端提交 Content-Type: application/x-www-form-urlencoded,后端同樣可以用對象接收。

// 前端請求:POST /api/users (Body: name=John&age=25,Content-Type: application/x-www-form-urlencoded)
@PostMapping("/api/users")
public ResponseEntity<?> createUser(UserForm form) {// form 對象會填充 name="John", age=25
}

4. JSON 請求體(Request Body)

JSON 請求體:
需用 @RequestBody 明確標識:

@PostMapping("/api/users")
public ResponseEntity<?> createUser(@RequestBody UserRequest request) {// 接收 JSON 數據,如 {"name": "John", "age": 25}
}

無注解對象綁定適用于以下兩種數據傳遞方式:

  • 查詢參數(URL 的 ?key=value,所有 HTTP 方法均支持)。
  • 表單數據(請求體的 key=value 格式,需 Content-Type: application/x-www-form-urlencoded,通常用于 POST/PUT)。

Content-Type(補充)

在HTTP請求和響應中,Content-Type是一個非常重要的頭部字段,它用于指示發送或接收的數據的媒體類型(MIME類型),幫助客戶端和服務器正確解析和處理數據。

Content-Type是HTTP協議的一個請求/響應頭,用于指定:

  • 請求中:客戶端發送給服務器的數據格式(如JSON、表單等)。
  • 響應中:服務器返回給客戶端的數據格式(如HTML、JSON等)。

如果沒有正確設置Content-Type,服務器可能無法正確解析請求數據,導致400 Bad Request等錯誤。

類型Content-Type用途后端接收方式
JSONapplication/jsonREST API傳輸對象@RequestBody
表單x-www-form-urlencoded普通表單提交@RequestParam
文件multipart/form-data文件上傳@RequestParam + MultipartFile
純文本text/plain日志/文本數據@RequestBody String
HTMLtext/html返回網頁通常由模板引擎處理

接口測試

在接口測試時,選擇 Header、Query、Path、Body 等選項取決于你的接口設計參數傳遞方式。

(1) Header(請求頭參數)

用途:傳遞認證信息(如Authorization)、客戶端信息(如User-Agent)等。

何時選擇:

  • 接口需要token或API-KEY。
  • 需要設置Content-Type、Accept等HTTP標準頭。

ApiPost配置:

  • 在 Header 選項卡中添加鍵值對,例如:
Authorization: Bearer xxxxxx
Content-Type: application/json

(2) Query(查詢參數)

用途:URL問號后的參數(如?page=1&size=10),用于過濾、分頁等。

何時選擇:

  • 參數是可選或非敏感數據(如分頁、排序字段)。
  • 接口使用@RequestParam接收。

ApiPost配置:

  • 在 Query 選項卡中添加參數,例如:
KeyValue
page1
size10
  • 最終URL會自動拼接為:http://api.example.com/users?page=1&size=10

(3) Path(路徑變量)

用途:RESTful風格URL中的變量(如/users/{id})。

何時選擇:

  • 接口URL包含動態路徑(如/users/123)。
  • 后端使用@PathVariable接收。

ApiPost配置:

  • 直接在URL中填寫路徑變量,例如
http://api.example.com/users/123
  • 無需額外配置(除非工具支持路徑變量占位符)。

(4) Body(請求體)

用途:傳輸復雜數據(如JSON、表單、文件)。

何時選擇:

  • POST/PUT請求需要提交數據。
  • 接口使用@RequestBody或@RequestParam(表單)。

ApiPost配置:

  • 根據數據類型選擇 Body 的子選項:
類型適用場景對應Content-Type
none無請求體(如GET請求)
form-data上傳文件或混合表單multipart/form-data
x-www-form-urlencoded普通表單提交(鍵值對)application/x-www-form-urlencoded
raw(JSON/XML等)發送JSON/XML等結構化數據application/json

(5)binary(二進制數據)

用途

  • 直接上傳原始二進制文件(如圖片、PDF、音頻等),無需編碼。

  • 適用于需要直接傳輸二進制流的接口(如文件上傳、自定義協議通信)。

使用場景

  • 上傳非文本類文件(如?.jpg,?.pdf,?.zip)。

  • 與后端通信使用自定義二進制協議。

ApiPost配置方法

  1. 在?Body?選項卡中選擇?binary

  2. 點擊?"選擇文件"?上傳二進制文件(如?image.png)。

  3. 工具會自動設置請求頭:

(6)msgpack(MessagePack格式)

用途

  • 傳輸 MessagePack 格式的數據(一種高效的二進制序列化格式,類似JSON但體積更小)。
  • 適用于高性能場景(如物聯網設備通信、游戲后端)。

特點

  • 比JSON更緊湊,解析速度更快。
  • 支持多種語言(需前后端同時支持MessagePack庫)。

使用場景

  • 需要減少網絡傳輸體積的API。
  • 與嵌入式設備或移動端通信。
特性binarymsgpack
數據格式原始二進制流結構化二進制序列化數據
典型用途文件上傳、自定義協議高效傳輸結構化數據(替代JSON)
Content-Typeapplication/octet-streamapplication/msgpack
可讀性不可讀(需解析)不可讀(但可反序列化為JSON)
體積取決于文件大小比JSON小30%~50%

如果只是上傳文件,更推薦使用 form-data(可同時傳文件和字段)。

如果追求性能但不想用msgpack,可考慮 Protocol Buffers(protobuf)。

錯誤

如果 Content-Type 與實際數據格式不匹配,服務器可能返回:

  • 415 Unsupported Media Type(格式不支持)
  • 400 Bad Request(解析失敗)

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/88322.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/88322.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/88322.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

創客匠人:技術賦能下的創始人 IP 打造與內容創作新邏輯

在知識變現的浪潮中&#xff0c;創始人 IP 的核心競爭力始終圍繞內容展開&#xff0c;但內容創作的效率與質量往往成為瓶頸。創客匠人基于對行業的深刻洞察&#xff0c;探索出技術與內容融合的路徑&#xff0c;為創始人 IP 打造提供了新的思路 —— 不再將內容創作視為單純的輸…

Mysql分片:一致性哈希算法

一、一致性哈希的核心原理哈希取模最大的痛點是&#xff1a;當分片數量&#xff08;例如數據庫節點數&#xff09;發生變化時&#xff0c;幾乎所有數據的哈希結果都會改變&#xff0c;導致大規模的數據遷移。一致性哈希就是為了解決這個“伸縮性差”的問題而誕生的。核心思想&a…

前端學習 vben 之 axios interceptors

前端學習 vben 之 axios interceptors interceptor 攔截器&#xff0c;是一種軟件設計模式&#xff0c;核心思想就是在程序執行的特定階段&#xff08;如請求發送前&#xff0c;響應返回后&#xff0c;方法調用前后等&#xff09;自動插入自定義邏輯。實現對核心流程的“攔截”…

【java面試day4】redis緩存-數據持久化

文章目錄問題&#x1f4ac; Question 1相關知識問題 &#x1f4ac; Question 1 Q&#xff1a;redis作為緩存&#xff0c;數據的持久化是怎么做的? A&#xff1a;有兩種機制&#xff0c;一種是RDB&#xff0c;RDB會在指定的時間間隔內將內存中的數據生成快照&#xff0c;保存…

Vue3中element plus默認獲取最近一周和上個月的時間區間并在后端分開傳值

<el-form-item label"結算時間&#xff1a;" prop"datetimerangevalue"><el-date-pickerv-model"datetimerangevalue"value-format"YYYY-MM-DD HH:mm:ss"type"datetimerange"range-separator"至"start-p…

SQLAlchemy數據庫連接密碼特殊字符處理完全指南

引言 在使用SQLAlchemy連接數據庫時&#xff0c;我們通常使用URL格式指定連接信息&#xff0c;如mysqlpymysql://user:passwordhost:port/database。然而&#xff0c;當密碼中包含特殊字符&#xff08;如、#、$、!等&#xff09;時&#xff0c;會導致URL解析錯誤&#xff0c;進…

1.4 ARM安全參考架構(PSA Certified)

目錄1.4.1 PSA Certified概述1.4.2 PSA認證級別詳解1.4.3 PSA與TF-A的關系1.4.4 PSA安全模型實現信任根(RoT)架構關鍵安全服務&#xff1a;1.4.5 認證流程實踐1.4.6 典型應用案例參考資料1.4.1 PSA Certified概述 ARM Platform Security Architecture (PSA) Certified 是一套完…

企業網絡安全的“金字塔”策略:構建全方位防護體系的核心思路

在數字化轉型的浪潮中&#xff0c;企業的網絡安全已從單一的防護措施&#xff0c;發展成為多層次、全方位的安全體系。如何精準應對日益復雜的網絡威脅&#xff0c;成為眾多企業關注的焦點。本文將分享企業構建高效安全防護“金字塔”的核心思路。一、從“排查隱患”到“主動防…

爬蟲-request模塊使用

1.使用和安裝2.代碼測試打印返回的內容&#xff0c;默認是請求體中的標識.text 是打印源代碼設置一下編碼

HTML + CSS + JavaScript

目錄 1 HTML HTML 文件基本結構 HTML 開發工具 HTML 常見標簽 標題標簽&#xff1a;h1 - h6 段落標簽&#xff1a;p 換行標簽&#xff1a;br 圖片標簽&#xff1a;img 超鏈接標簽&#xff1a;a 表格標簽 表單標簽 form 標簽 input 標簽 select 標簽 textarea 標…

Java 與 MySQL 性能優化:MySQL連接池參數優化與性能提升

文章目錄引言一、連接池的基本概念與作用二、關鍵連接參數詳解2.1 max_connections2.2 wait_timeout2.3 interactive_timeout2.4 connect_timeout2.5 thread_cache_size三、連接池參數不合理導致的性能問題3.1 連接耗盡3.2 響應變慢3.3 連接失效3.4 資源浪費四、連接池參數優化…

浪潮CD1000-移動云電腦-RK3528芯片-2+32G-開啟ADB ROOT破解教程

浪潮CD1000-移動云電腦-RK3528芯片-232G-安卓9-開啟ADB ROOT破解教程破解教程&#xff1a;1.先下載好開心電視助手&#xff08;下載地址及其他版本&#xff1a;【工具大全】-【開心電視助手3.8&#xff0f;4.0&#xff0f;4.6&#xff0f;6.0&#xff0f;6.2&#xff0f;6.3&am…

【網絡編程】簡易的 p2p 模型,實現兩臺虛擬機之間的簡單點對點通信,并以小見大觀察 TCP 協議的具體運行

文章目錄基本概念業務拆解代碼實現準備工作實現被動的功能——多線程指針函數實現主動的功能——用戶選擇界面主函數代碼執行效果意外收獲總結推薦一個零聲教育學習教程&#xff0c;個人覺得老師講得不錯&#xff0c;分享給大家&#xff1a;[Linux&#xff0c;Nginx&#xff0c…

react狀態管理庫 - zustand

什么是zustand&#xff1f; zustand 是一個輕量級、快速且可擴展的 React 狀態管理庫&#xff0c;旨在提供一種簡單直接的方式來管理應用狀態&#xff0c;而無需其他解決方案通常伴隨的繁瑣代碼。根據官方 Zustand 文檔&#xff0c;Zustand 是“一個使用簡化 flux 原理的小型、…

粗排樣本架構升級:融合LTR特征提升模型性能的技術實踐

粗排樣本架構升級&#xff1a;融合LTR特征提升模型性能的技術實踐 ——基于PySpark的樣本構建與特征工程深度解析 一、粗排系統的定位與技術演進 在推薦系統級聯架構中&#xff0c;?粗排&#xff08;Rough Ranking&#xff09;?? 承擔著關鍵過渡角色&#xff1a;從召回層獲…

CCF-GESP 等級考試 2025年6月認證C++四級真題解析

1 單選題&#xff08;每題 2 分&#xff0c;共 30 分&#xff09;第1題 在C中&#xff0c;聲明一個指向整型變量的指針的正確語法是&#xff08; &#xff09;。A. int* ptr; B. *int ptr; C. int ptr*; D. ptr …

PlantUML 在 IDEA 中文版中的安裝與使用指南

目錄 摘要 一、安裝 PlantUML 插件 二、配置 PlantUML 運行環境 三、創建 PlantUML 文件 四、編寫 PlantUML 代碼 五、生成并查看圖表 六、自動生成類圖&#xff08;重點新增&#xff09; 6.1 從 Java 類生成類圖 6.2 類圖語法詳解 6.3 類圖高級技巧 七、常見問題及…

創客匠人:創始人 IP 打造中 “放下身段” 的深層邏輯

在 IP 經濟火熱的當下&#xff0c;無數創始人投身 IP 打造&#xff0c;卻鮮少有人意識到&#xff1a;真正能實現 IP 變現的核心&#xff0c;并非專業知識的堆砌&#xff0c;而是與用戶建立 “可交往” 的連接。創客匠人通過多年服務 IP 的實踐發現&#xff0c;那些穿越周期的創…

C語言<數據結構-鏈表>

鏈表是一種常見且重要的數據結構&#xff0c;在 C 語言中&#xff0c;它通過指針將一系列的節點連接起來&#xff0c;每個節點可以存儲不同類型的數據。相比數組&#xff0c;鏈表在插入和刪除元素時不需要移動大量數據&#xff0c;具有更好的靈活性&#xff0c;尤其適合處理動態…

基于Matlab多特征融合的可視化指紋識別系統

針對中小規模&#xff08;百級&#xff09;指紋模板庫中常見的脊線斷裂、噪聲干擾以及結果缺乏可解釋性等難點&#xff0c;本文提出并實現了一種基于多特征融合的可視化指紋識別系統。系統整體采用模塊化設計&#xff1a;在預處理階段&#xff0c;先通過改進的灰度歸一化與局部…