【SpringMVC】深入解析使用 Postman 和瀏覽器模擬將單個與多個參數傳遞到后端和后端接收過程

在這里插入圖片描述

在這里插入圖片描述

在這里插入圖片描述


SpringMVC—請求(Request)


訪問不同的路徑,就是發送不同的請求;在發送請求時,可能會帶一些參數,所以學習Spring的請求,主要是學習如何傳遞參數到后端以及后端如何接收

我們主要是使用 瀏覽器Postman 來模擬傳遞參數 的過程


后端開發人員無需過度關注如何傳遞參數,了解即可,實際開發中以 Postman 測試為主:

比如餐廳的廚師,不關注用戶是在店里下單,還是外賣平臺下單,或者小程序下單,只需要知道如何接收訂單,根據訂單做出對應的菜肴就可以了.


1.傳遞單個參數



(1) 處理常見兩個報錯


第一個報錯

我們來看下列報錯

在這里插入圖片描述

這是因為啟動類的名字不能隨便修改,而煮啵剛剛看.example 不順眼,就刪掉了;


在這里插入圖片描述

把啟動類的名字改回去,這個和的pom.xml里面寫的是一樣的。一般是在創建項目的時候就規定好了的;


所以,我們應該在剛開始創建項目的時候,提前指定好啟動類的名字,編譯器會自動配置對應的 porn 文件

在這里插入圖片描述


在這里插入圖片描述


第二個報錯

在這里插入圖片描述

遇到上述問題,修改下列這些地方即可:

在這里插入圖片描述


在這里插入圖片描述


在這里插入圖片描述


(2) 正常傳遞參數


接收單個參數,在 Spring MVC 中直接用方法中的參數就可以,比如以下代碼:

在這里插入圖片描述

重新運行程序后,我們使用 Postman 進行傳參:

在這里插入圖片描述


填好對應的 URL 后,對剛剛代碼中的參數進行傳參:

在這里插入圖片描述


修改請求方式為 GET ,并且發送:

在這里插入圖片描述


咱們使用瀏覽器發送請求并傳參:

http://127.0.0.1:8080/request/r1?keyword=手機

在這里插入圖片描述

可以看到,后端程序正確拿到了 keyword 參數的值;

Spring MVC 會根據方法的參數名,找到對應的參數,賦值給方法

在這里插入圖片描述

如果參數不一致,是獲取不到參數的.

比如請求URL:http://127.0.0.1:8080/request/r1?keyword666=手機


響應結果:

在這里插入圖片描述


(3) 傳遞簡單類型或包裝類型參數的注意事項


使用基本類型來接收參數時,參數必須傳 (除boolean類型),否則會報500錯誤

類型不匹配時,會報400錯誤但是類型不匹配是針對簡單類型的;

對于如下 r1 方法的參數類型 String 等包裝類型,哪怕傳參不是 String 類型,也不會報錯:

在這里插入圖片描述


(4) 基本類型的參數不傳遞


在這里插入圖片描述


對于如上代碼,我們在請求中正常傳遞參數的 URL 如下:

http://127.0.0.1:8080/request/r2?age=18

瀏覽器響應情況:

在這里插入圖片描述


通過Fiddler觀察請求和響應,HTTP響應狀態碼為200,Content-Typetext/html

在這里插入圖片描述


正常鏈接:http://127.0.0.1:8080/request/r2?age=18

不傳參數:http://127.0.0.1:8080/request/r2

瀏覽器響應情況:

在這里插入圖片描述


通過 Fiddler 觀察請求和響應,HTTP響應狀態碼為500

在這里插入圖片描述


嘗試觀察程序的錯誤日志,并解決

在這里插入圖片描述

查看日志堆棧信息的首行,報錯信息顯示:

  • int類型的參數’age’,雖然為可選的,但由于被聲明為基本類型而不能轉換為空值
  • 考慮將其聲明為對應基本類型的包裝類型

按照錯誤信息解決錯誤即可:

  • 最開始學習時,會遇到各種各樣的問題,我們要養成看錯誤日志的習慣,根據錯誤日志來解決問題.

  • 最開始可能會看不懂,或者比較懵,要耐下心來,慢慢看,后面課堂中也會教大家更多看日志的思路;


(5) 基本類型的參數傳遞時類型不匹配


http://127.0.0.1:8080/request/r2?age=abcd

瀏覽器響應情況:

在這里插入圖片描述


通過 Fiddler 觀察請求和響應,HTTP響應狀態碼為 400

在這里插入圖片描述

對于包裝類型,如果不傳對應參數,Spring 接收到的數據則為 null;如果我們傳遞的值,不符合參數的包裝類型,也是可以拿到傳遞的值的

所以企業開發中,對于參數可能為空的數據,建議使用包裝類型


2. 傳遞多個參數


(1) 正常傳遞多個參數


如何接收多個參數呢?

和接收單個參數一樣,直接使用方法的參數接收即可,使用多個形參.

在這里插入圖片描述


打開 Postman 發送請求:

在這里插入圖片描述


使用瀏覽器發送請求并傳參:

http://127.0.0.1:8080/request/r3?userName=練習時長&password=“365365183”

在這里插入圖片描述


可以看到,后端程序正確拿到了 name 和 password 參數的值

在這里插入圖片描述


當有多個參數時,前后端進行參數匹配時,是以參數的名稱進行匹配的,因此參數的位置是不影響后端獲取參數的結果

比如訪問:

http://127.0.0.1:8080/request/r3?password=“365365183”&userName=練習時長


同樣可以拿到正端獲取參數的結果:

在這里插入圖片描述


(2) 完善登錄細節


上述使用的是 GET 請求,但是對于登錄操作,一般把用戶信息放在 body 中,所以一般使用 POST請求 (GET 也可以有 body):

在這里插入圖片描述


說明:

  • 在 Postman 中,選擇 POST 方式,并且選擇表單提交content-type,如上圖
  • 登錄操作一般都是選擇使用 POST,這樣參數就會在 body 中上傳

在這里插入圖片描述


(3) 使用 Postman 發送請求的細節規范


在響應的內容中,我們看見, userName 和 password 都輸出了兩份,因為我們在 Postman 中發送請求的方式不規范:

在這里插入圖片描述


在選擇欄中出現一個以上的綠點,說明請求發送的次數大于一次;

在上面的這個請求中,就是在 URL 中輸入了一次數據,在 body 中又輸入了一次數據,響應就會輸出兩份數據;

因此,我們要確保只有一個綠點;


我們關掉其中一個綠點,再次發送請求,可以發現響應結果恢復正常:

在這里插入圖片描述


或者我們刪除 URL 中的 Params 中的鍵值對:

在這里插入圖片描述


刪除后,發現 Params 綠點消失,并且信息不再出現在 URL 中,再次發送請求,響應結果也恢復正常:

在這里插入圖片描述


(4) 使用 GET 和 POST 的細節


GET

剛剛我們談到,GET 一般沒有 body ,因此參數一般放在 URL 中,但是 GET 也可以有 body:

在這里插入圖片描述


抓包結果:

在這里插入圖片描述

雖然響應的結果可以看出,在這次 GET 響應中沒有拿到參數,但是 GET 請求中已經拿到了參數;

只是 GET 請求的參數一般在首行 URL 部分,而不再下面的 body ,所以為了規范,一般 GET 沒有 body


POST

如果我們使用 POST ,參數也可以設置在 URL ,而不設置在 body

在這里插入圖片描述


查看抓包結果:

在這里插入圖片描述


因此,如果我們不按照規定使用,如把參數放在 GET 請求的 body 位置,可能在響應中就拿不到參數的值,因此,我們要按照規定使用 GETPOST


在這里插入圖片描述

在這里插入圖片描述

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

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

相關文章

04 | 初始化 fastgo 項目倉庫

提示: 所有體系課見專欄:Go 項目開發極速入門實戰課;歡迎加入我的訓練營:云原生AI實戰營,一個助力 Go 開發者在 AI 時代建立技術競爭力的實戰營;本節課最終源碼位于 fastgo 項目的 feature/s01 分支&#x…

Docker 安裝成功后,安裝 Dify 中文版本的步驟

Docker 安裝成功后,安裝 Dify 中文版本的步驟如下1: 克隆 Dify 代碼倉庫:在終端中執行以下命令,將 Dify 源代碼克隆至本地環境。 bash git clone https://github.com/langgenius/dify.git進入 Dify 的 docker 目錄: b…

RPC服務調用深度解析:從原理到Java實踐

一、RPC的核心原理與架構設計 1.1 RPC的本質 RPC(Remote Procedure Call)是一種分布式系統間通信協議,允許程序像調用本地方法一樣調用遠程服務。其核心目標是通過位置透明性和協議標準化隱藏網絡通信細節。RPC的調用流程可抽象為以下步驟&…

電腦的寫字板如何使用?

打開寫字板: 直接按一下鍵盤上的win R 鍵,然后輸入:write , 再按一下回車 , 即可打開寫字板 可以在里面寫文字 和 插入圖片等… , 如下所示: 保存寫字板內容: 當我們寫好了之后,…

醫療AI測試實戰:如何確保人工智能安全賦能醫療行業?

一、醫療AI測試的重要性 人工智能(AI)正廣泛應用于醫療行業,如疾病診斷、醫學影像分析、藥物研發、手術機器人和智能健康管理等領域。醫療AI技術的應用不僅提高了診斷效率,還能降低誤診率,改善患者治療效果。然而&…

AI日報 - 2025年3月12日

AI日報 - 2025年3月12日 🌟 今日概覽(60秒速覽) ▎🤖 AGI突破 | Anthropic CEO預測AI將主導代碼編寫 🔬 自訓練技術顯著提升LLM思維清晰度 ▎💼 商業動向 | OpenAI與CoreWeave達成119億美元基建協議 &…

跳表數據結構

跳表(Skip List)是一種支持高效插入、刪除和查找的鏈表結構,用于加速查找操作,特別適用于有序數據集合。它在Redis、LevelDB等系統中被用于**有序集合(Sorted Set)**的實現。 1. 跳表的結構 跳表的核心思…

系統會把原先的對話狀態堆棧從 [“assistant“] 更新為 [“assistant“, “update_flight“]這個更新的處理過程

這個更新主要是在 State 定義中通過 Annotated 來自動處理的。在 State 類型中,我們對 dialog_state 字段綁定了 update_dialog_stack 函數,如下所示: class State(TypedDict):messages: Annotated[list[AnyMessage], add_messages]user_inf…

HTTP發送POST請求的兩種方式

1、json String json HttpRequest.post(getUrl(method, "v1", url, userId, appKey)).header("Content-type", "application/json") // 設置請求頭為 JSON 格式.body(JSONUtil.toJsonStr(params)) // 請求體為 JSON 字符串.execute().body(); …

Windows 萬興恢復專家 Wondershare Recoverit-v13.5.7.9-[電腦數據恢復工具]

Windows 萬興恢復專家Wondershare_Recoverit 鏈接:https://pan.xunlei.com/s/VOL3z608vzAj_IYTvH-F1q7kA1?pwdiu89# 1. 打開Setup.exe進行安裝,安裝完不要打開軟件,記住安裝目錄 2. 將"Crack"文件夾內的所有文件復制到安裝目錄 …

Blender UV紋理貼圖,導出FBX到Unity

加載ps好的模型貼圖。右下角選擇《材質》基礎色里面選擇《圖像紋理》,選擇你的圖片。 選擇上面UV選項卡。左上角選擇UV編輯器。選中物體,TAB進入編輯模式。即可調整映射的圖像范圍。 其中渲染設置可以在左側下邊脫出。 導出帶紋理FBX模型 路徑選擇復…

華為hcia——Datacom實驗指南——以太網幀和IPV4數據包格式(一)

實驗開始 第一步配置環境 第二步配置客戶端 如圖所示,我們把客戶端的ip配置成192.168.1.10,網關設為192.168.1.1 第三步配置交換機1 system-view sysname LSW1 vlan batch 10 interface ethernet0/0/1 port link-type access port default vlan 10 qu…

解鎖 Ryu API:從 Python 接口到 REST 設計全解析

Ryu 4.34 版本的 API 功能分類、核心接口說明及示例代碼,結合其 Python 應用開發接口和 REST API 的設計特點進行綜合解析: 一、Python 應用開發 API Ryu 的核心能力通過 Python 類庫實現,開發者需繼承 RyuApp 類并注冊事件處理函數。 1. 應…

如何在需求分析階段考慮未來擴展性

在需求分析階段考慮未來擴展性的關鍵在于 前瞻規劃、靈活架構、標準設計。其中,前瞻規劃尤為重要,因為通過全面分析業務發展趨勢與技術演進,能夠在初期設計階段預留足夠擴展空間,降低后期改造成本,為企業長期發展奠定堅…

Docker搭建Redis哨兵模式【一主兩從三哨兵】

Docker搭建Redis哨兵模式 系統: CentOS 7 Dockder 版本: VMware虛擬機 網絡適配器 網絡連接 橋接模式:直接連接物理網絡查看IP命令 ip addr一、哨兵模式概述 1. 官方文檔與關聯博客 官方文檔:https://redis.io/docs/latest/operate/oss_and_stack/management/sentinel關聯博…

關于統計建模大賽的選題

文章目錄 0.大賽主題1.量化分析和風險管理2.金融市場預測與統計建模3.投資與機器學習相關4.大數據和醫療5.智能制造相關的6.教育行業 0.大賽主題 統計創新應用數據引領未來:這個主題其實很寬泛,沒有什么明確的這個要求,所以只要是和我們的統…

Docker 學習筆記:從入門到部署,實戰演練全流程!

📌 開篇:為什么要學 Docker? 還在為環境不一致、部署麻煩、依賴沖突頭疼嗎?Docker 讓一切變得簡單!作為現代開發和運維的神器,Docker 讓我們可以用 一句命令 解決 “在我電腦上能跑” 的問題。今天&#x…

ThinkPhp 5 安裝阿里云內容安全(綠化)

composer require alibabacloud/green-20220302 首先要把php5(不支持php7)的執行文件設置到PATH環境變量 此外還要先執行composer update php5.5和php5.6的區別 5.5認為 <? 開頭的也是php文件&#xff0c;包括 <?php 5.6認為 <? 開頭的不是php文件&#xff0c;只…

使用NVM工具管理Node版本

Date: 2025.03.10 14:53:55 author: lijianzhan NVM&#xff08;Node Version Manager&#xff09;用于在同一個系統上管理多個 Node.js 版本,NVM 允許你安裝、使用和切換不同的 Node.js 版本。這對于前端工作人員來說可以更方便的管理和維護不同nodejs版本的項目。 &#xff0…

Vue主流的狀態保存框架對比

一、Vuex 4&#xff08;官方傳統方案&#xff09; 優點&#xff1a; 官方背書&#xff1a;Vue 官方長期維護&#xff0c;成熟穩定。結構化清晰&#xff1a;通過 state/mutations/actions/getters 強制約定代碼結構&#xff0c;適合大型團隊協作。插件生態&#xff1a;支持中間…