SpringBoot六種API請求參數讀取方式

SpringBoot六種API請求參數讀取方式

同步請求和異步請求

  • 同步: 指單線程依次做幾件事
  • 異步: 指多線程同時做幾件事

同步請求: 指客戶端瀏覽器只有一個主線程, 此線程負責頁面的渲染和發出請求等操作, 如果此主線程發出請求的話則停止渲染而且會清空頁面顯示的內容 直到服務器響應了數據后才能再次顯示, 由于主線程清空了原有顯示的內容所以只能實現頁面的整體刷新(整體改變)

異步請求: 指客戶端的主線程只負責頁面渲染相關操作,發請求的事由新的子線程操作, 這樣子線程發出請求時頁面不需要清空,而且可以將查詢回來的數據展示在原有頁面基礎之上, 這樣實現的效果就叫做頁面的局部刷新

客戶端發出請求的幾種方式

  • 通過瀏覽器的地址欄中發出請求 同步請求

  • 通過html頁面中的超鏈接發出請求 同步請求

  • 通過html頁面中的form表單發出請求 同步請求

  • 通過前端框架發出請求 異步請求

HTTP請求

  • 請求地址
  • 請求方法
  • 狀態碼
  • 同源策略
  • 請求頭
  • 響應頭

HTTP狀態碼


| 序號 | 方法   | 描述                                                         |
| ---- | ------ | ------------------------------------------------------------ |
| 1    | GET    | 用于請求服務器發送某個資源。GET請求不應該對服務器上的資源做出任何更改,并且應該是冪等的(即多次重復的請求應該產生相同的結果)。例如,當你在瀏覽器中輸入URL地址時,瀏覽器會發送一個GET請求來獲取該URL對應的網頁。 |
| 2    | HEAD   | 類似于GET請求,但服務器不返回請求的資源主體,只返回響應頭。HEAD請求通常用于獲取資源的元信息,如資源的大小、類型等,而不需要獲取資源的實際內容。 |
| 3    | POST   | 用于向服務器提交數據,通常用于提交表單或上傳文件。POST請求可能會導致服務器上的狀態更改,并且不一定是冪等的。例如,在提交注冊表單時,瀏覽器通常會發送一個POST請求,將用戶提供的信息發送到服務器進行處理。 |
| 4    | PUT    | 用于向服務器上傳資源,通常用于更新已存在的資源或創建新的資源。PUT請求應該是冪等的,即多次執行相同的PUT請求應該產生相同的結果。 |
| 5    | DELETE | 用于請求服務器刪除指定的資源。DELETE請求應該是冪等的,即多次執行相同的DELETE請求應該產生相同的結果。 |
| 6    | CONNECT | 用于建立到服務器上指定端口的隧道,通常用于代理服務器。 |
| 7    | OPTIONS | 用于請求服務器返回支持的HTTP方法和其他選項。例如,客戶端可以發送OPTIONS請求來確定服務器支持哪些CORS(跨域資源共享)策略。 |
| 8    | TRACE  | 回顯服務器收到的請求,主要用于測試或診斷。               |
| 9    | PATCH  | 用于在請求-響應鏈上的每個節點獲取傳輸路徑。PATCH請求通常用于調試和測試,以查看請求在經過各種代理服務器和中間件時如何被修改。 |

HTTP響應頭信息


| 響應頭信息(英文) | 響應頭信息(中文) | 描述                                                                 |
|-------------------|--------------------|----------------------------------------------------------------------|
| Date              | 日期               | 響應生成的日期和時間。例如:Wed, 18 Apr 2024 12:00:00 GMT          |
| Server            | 服務器             | 服務器軟件的名稱和版本。例如:Apache/2.4.1 (Unix)                |
| Content-Type      | 內容類型           | 響應體的媒體類型(MIME類型),如text/html; charset=UTF-8, application/json等。|
| Content-Length    | 內容長度           | 響應體的大小,單位是字節。例如:3145                             |
| Content-Encoding  | 內容編碼           | 響應體的壓縮編碼,如 gzip, deflate等。                         |
| Content-Language  | 內容語言           | 響應體的語言。例如:zh-CN                                        |
| Content-Location  | 內容位置           | 響應體的 URI。例如:/index.html                                 |
| Content-Range     | 內容范圍           | 響應體的字節范圍,用于分塊傳輸。例如:bytes 0-999/8000          |
| Cache-Control     | 緩存控制           | 控制響應的緩存行為, 如 no-cache 表示必須重新請求。            |
| Connection        | 連接               | 管理連接的選項,如keep-alive或close,keep-alive 表示連接不會在傳輸后關閉。|
| Set-Cookie        | 設置 Cookie        | 設置客戶端的 cookie。例如:sessionId=abc123; Path=/; Secure      |
| Expires           | 過期時間           | 響應體的過期日期和時間。例如:Thu, 18 Apr 2024 12:00:00 GMT    |
| Last-Modified     | 最后修改時間       | 資源最后被修改的日期和時間。例如:Wed, 18 Apr 2024 11:00:00 GMT|
| ETag              | 實體標簽           | 資源的特定版本的標識符。例如:"33a64df551425fcc55e6"           |
| Location          | 位置               | 用于重定向的 URI。例如:/newresource                            |
| Pragma            | 實現特定的指令     | 包含實現特定的指令,如 no-cache。                             |
| WWW-Authenticate  | 認證信息           | 認證信息,通常用于HTTP認證。例如:Basic realm="Access to the site" |
| Accept-Ranges     | 接受范圍           | 指定可接受的請求范圍類型。例如:bytes                        |
| Age               | 經過時間           | 響應生成后經過的秒數,從原始服務器生成到代理服務器。例如:24   |
| Allow             | 允許方法           | 列出資源允許的 HTTP 方法 。例如:GET, POST,HEAD等           |
| Vary              | 變化               | 告訴下游代理如何使用響應頭信息來確定響應是否可以從緩存中獲取。例如:Accept |
| Strict-Transport-Security | 嚴格傳輸安全 | 指示瀏覽器僅通過 HTTPS 與服務器通信。例如:max-age=31536000; includeSubDomains |
| X-Frame-Options   | 框架選項           | 控制頁面是否允許在框架中顯示,防止點擊劫持攻擊。例如:SAMEORIGIN |
| X-Content-Type-Options | 內容類型選項 | 指示瀏覽器不要嘗試猜測資源的 MIME 類型。例如:nosniff      |
| X-XSS-Protection   | XSS保護            | 控制瀏覽器的 XSS 過濾和阻斷。例如:1; mode=block           |
| Public-Key-Pins   | 公鑰固定           | HTTP 頭信息,用于HTTP公共密鑰固定(HPKP),一種安全機制,用于防止中間人攻擊。例如:pin-sha256="base64+primarykey"; pin-sha256="base64+backupkey"; max-age=expireTime |

Get請求和Post請求

從字面理解:Get是跟服務器要數據, Post是給服務器傳數據

  • Get: 請求參數寫在請求地址的后面(可見),請求參數有大小限制只能穿幾k的數據(不能處理文件上傳) 應用場景: 查詢請求一般都會使用get, 刪除也會使用get請求

  • Post:請求參數放在請求體里面(不可見),參數沒有大小限制 應用場景: 文件上傳, 帶有敏感信息的請求(比如注冊登錄時有密碼)

🌐 URL 簡介

URL 是互聯網上用于檢索任何資源的機制,代表統一資源定位符(Uniform Resource Locator)。它就像一個給定資源在網絡上的獨特地址,理論上任何資源都可以通過 URL 進行訪問。

💻 URL 的組成

一個完整的 URL 通常由以下幾個部分組成:協議、域名、路徑、查詢參數和片段標識符。例如,在 URL https://www.example.com/path/to/resource?query=string#fragment中,https 是協議,www.example.com 是域名,/path/to/resource 是路徑,query=string 是查詢參數,#fragment 是片段標識符.

🌍 URL 的作用 URL

在互聯網上扮演著至關重要的角色,它使我們能夠訪問和共享各種資源,例如網頁、圖片、視頻、文檔等。通過 URL,我們可以輕松地找到所需的信息,并與他人進行交流。

[參考地址](https://tangjiusheng.com/web/qdkf/598.html)
(https://www.bookstack.cn/read/html-tutorial/spilt.4.docs-url.md)

1.@RequestParam

  • 作用:取URL中的查詢參數,@RequestParam:將請求參數綁定到你控制器的方法參數上(是springmvc中接收普通參數的注解)
  • 使用場景:當需要從GET或POST請求的URL中讀取參數時使用。
語法:@RequestParam(value=”參數名”,required=true/false,defaultValue=””)value:參數名required:是否包含該參數,默認為true,表示該請求路徑中必須包含該參數,如果不包含就報錯。defaultValue:默認參數值,如果設置了該值,required=true將失效,自動為false,如果沒有傳該參數,就使用默認值
步驟:
1、創建web工程、引入依賴
2、配置SpringMvc入口文件 --DispatcherServlet--為總調度、web.xml里配置
3、創建Springmvc.xml文件--理解為:適配器(這里不需要自已指定適配、springmvc會自動指定)--視圖解析器
4、創建 業務處理器 Controller5、測試

https://blog.csdn.net/sswqzx/article/details/84195043

1/2/3上述步驟參考此博文

  • 目錄結構

  • 基本使用
package com.ncist.controller;import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;/*** 功能:* 作者:兮和* 時間: 9:55*/
@RestController
public class WebController {@GetMapping("/search")public String searchUser(@RequestParam(value = "keyword", required = false) String keyword, Model model) {// 如果 keyword 參數存在,則打印它;否則,使用默認值String message = (keyword != null) ? "搜索關鍵詞: " + keyword : "沒有提供搜索關鍵詞";System.out.println(message);// 將消息添加到模型中model.addAttribute("msg", message);return keyword;}
}

apifox測試結果

控制臺打印測試結果

終端控制臺打印結果

  • 指定默認值
@GetMapping("/items")
public String listItems(@RequestParam(value = "category", defaultValue = "all") String category) {// 如果請求中沒有提供 category 參數,將使用默認值 "all"System.out.println("列出類別為 " + category + " 的項目");return "items";
}
http://localhost:9090/items?category=books

apifox測試結果

  • 允許為空
@PostMapping("/register")
public String registerUser(@RequestParam(value = "age", required = false) Integer age) {if (age != null) {System.out.println("注冊用戶年齡: " + age);} else {System.out.println("年齡未提供");}return "registration-success";
}
  • 請求參數的多個值
    @GetMapping("/book")public String getBookDetails(@RequestParam("authors") List<String> authors) {// authors 參數可以接收多個值System.out.println("書籍作者: " + authors);return "book-details";}
  • 請求參數的條件處理
@GetMapping("/feature")
public String toggleFeature(@RequestParam(value = "enable", required = false) Boolean enable) {if (enable != null && enable) {System.out.println("功能已啟用");} else {System.out.println("功能未啟用或未指定");}return "feature-status";
}

上述數據示例結果和上文一樣,使用apifox進行項目測試,你會發現上述數據的變化情況

2.@PathVariable

  • 作用:從URL的路徑中提取變量
    基本使用:
    使用 @PathVariable 可以捕獲URL模板中的變量。例如,/users/{id} 路徑中的 {id} 是一個路徑變量,可以通過 @PathVariable(“id”) 來獲取。

類型轉換:
Spring MVC 會嘗試將路徑變量的字符串值轉換為方法參數的類型。如果轉換失敗,會拋出 TypeMismatchException。

正則表達式限制:
可以在 @PathVariable 的 value 屬性中使用正則表達式來限制變量的格式,如 @GetMapping(“/users/{id:\d+}”)。

可選參數:
通過在路徑變量名稱后添加 ? 或設置 required = false 屬性,可以將路徑變量設置為可選。

默認值:
使用 defaultValue 屬性為路徑變量提供默認值。

與 @RequestParam 同時使用:
可以在同一個方法中同時使用 @PathVariable 和 @RequestParam 來獲取路徑變量和查詢參數。

   @PostMapping(value = "/item/{id}/{method}")public String getForm(@PathVariable("id") String itemId ,  @PathVariable("method") String methodCall , Model model){if(methodCall.equals("create")){//logic}if(methodCall.equals("update")){//logic}return "path to your form";}

參考地址:https://blog.csdn.net/weixin_45393094/article/details/108814901

3.@MatrixVariable

  • 作用:用于從URL的矩陣參數中讀取值
@RequestMapping(value="{path}/simple", method=RequestMethod.GET)
public @ResponseBody String withMatrixVariable(@PathVariable String path, @MatrixVariable String foo) {return "Obtained matrix variable 'foo=" + foo + "' from path segment '" + path + "'";
}

4.@RequestBody

  • 作用:讀取HTTP請求的body部分,通常用于接收JSON或XML格式的數據。
    http://www.itsoku.com/article/216
@PostMapping("/users")
public ResponseEntity<?> addUser(@RequestBody User user) {// 處理用戶對象return ResponseEntity.ok().body(user);
}

5.@RequestHeader

  • 作用:@RequestHeader:用于讀取HTTP請求的header部分。
@GetMapping("/user-agent")
public ResponseEntity<String> getUserAgent(@RequestHeader(value = "User-Agent", required = false, defaultValue = "Unknown") String userAgent) {return ResponseEntity.ok("User Agent: " + userAgent);
}

6.@CookieValue

  • 作用:用于讀取HTTP請求中的cookie值。
@GetMapping("/cookie")
public String getCookieValue(@CookieValue(value = "sessionId", defaultValue = "noSession") String sessionId) {return "Session ID: " + sessionId;
}

補充三種:

  • 直接把請求參數寫在方法的形參中

  • 封裝一個bean直接來接收

  • 原生的HttpServletRequest接收

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

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

相關文章

優化基礎(二):線性組合、仿射組合、錐組合、凸組合、線性集合、仿射集合、錐集合、凸集合的理解

文章目錄 前言組合線性組合 (linear combination)仿射組合 (affine combination)錐組合 (conic combination)凸組合 (convex combination) 集合仿射集合凸集合 練習&#xff1a;哪個圖形是凸的&#xff0c;哪個是仿射的&#xff1f;參考資料 前言 組合側重于描述由一些基點生成…

越洗越黑”的Pandas數據清洗

引言 先來一個腦筋急轉彎活躍一下枯燥工作日常&#xff0c;問&#xff1a;“什么東西越洗越黑&#xff1f;” 有沒有猜到的&#xff1f;猜不到我告訴你吧&#xff01; 答案是“煤球”。那么這個腦機急轉彎跟我們要討論的話題有沒有關系呢&#xff1f; 嗯是的&#xff0c;還是沾…

三相智能電表通過Modbus轉Profinet網關與PLC通訊案例

Modbus轉Profinet網關&#xff08;XD-MDPN100/300&#xff09;的主要功能是實現Modbus協議和Profinet協議之間的轉換和通信。Modbus轉Profinet網關集成了Modbus和Profinet兩種協議&#xff0c;支持Modbus RTU主站/從站&#xff0c;并可以與RS485接口的設備&#xff0c;它自帶網…

「前端+鴻蒙」核心技術HTML5+CSS3

1、CS架構與BS架構 CS架構(Client-Server):客戶端/服務器架構。用戶通過客戶端軟件與服務器進行交互,客戶端需要安裝特定的軟件才能訪問服務器上的資源。BS架構(Browser-Server):瀏覽器/服務器架構。用戶通過瀏覽器訪問服務器上的網頁,無需安裝額外的軟件,所有的交互都…

接口請求參數為文件時如何測試

方法 工具&#xff1a;Postman 步驟&#xff1a;①點擊body②點擊form-data③選擇key類型為fie ④輸入參數名⑤選擇參數上傳⑥發送請求

對稱二叉樹(oj題)

一、題目鏈接https://leetcode-cn.com/problems/symmetric-tree/ 二、題目思路 給你一個二叉樹的根節點 root &#xff0c; 檢查它是否軸對稱的思路: 1.將該樹的左子樹和右子樹&#xff0c;當做兩棵樹&#xff0c;調用 判斷兩棵樹是否對稱相等的函數 2.判斷兩顆樹是否對稱相…

告別低效提問:掌握BARD技巧,讓AI成為你的智能助手!

今天只聊一個主題&#xff1a;提示詞 Prompt。 說到提示詞&#xff0c;大家可能都看過GPT的高級示例&#xff0c;那些幾百字的提示詞&#xff0c;寫起來確實不容易。 那么&#xff0c;如何寫出同樣效果的提示詞呢&#xff1f; 有沒有什么公式或者系統學習的方法&#xff1f;…

在Linux/Ubuntu/Debian中使用lshw查看系統信息

在Linux/Ubuntu/Debian中使用lshw查看系統信息 lshw 是一個用于顯示硬件配置的命令&#xff0c;可以提供系統硬件的詳細信息&#xff0c;包括 CPU、內存、硬盤、主板等。該命令需要超級用戶權限來獲取詳細信息。 常見用法&#xff1a; 顯示所有硬件信息&#xff1a; sudo l…

木葉飛舞之【機器人ROS2】篇章_第三節、給turtlebot3安裝realsense深度相機

我們做視覺slam時會用到深度相機&#xff0c;但是gazebo的turtlebot3中只有rgb相機&#xff0c;沒有深度&#xff0c;因此本節會修改代碼&#xff0c;來給我們的小烏龜增加一個rgbd相機。 效果展示 發布topic如下圖 圖片大小都是640*480 1. 修改model.sdf文件 1.1 路徑位置…

射頻功率限幅器簡略

在功率輸入保護方面&#xff0c;限幅器是最好用的器件之一&#xff0c;可以保護后級電路不受超限功率的損害&#xff0c;限幅器其實像TVS功能一樣&#xff0c;讓超過閾值的功率釋放到接地上&#xff0c;來達到限制幅度的目的&#xff0c;目前限幅器的限幅幅度大多都大于15dBm,很…

啟智CV機器人,ROS, ubuntu 18.04

資料&#xff1a; https://wiki.ros.org/kinetic/Installation/Ubuntu https://blog.csdn.net/qq_44339029/article/details/120579608 http://wiki.ros.org/melodic/Installation/Ubuntu https://github.com/6-robot/wpb_cv 一、安裝ros環境 裝VM。 裝ubuntu18.04 desktop.…

100道面試必會算法-27-美團2024面試第一題-前綴和矩陣

100道面試必會算法-27-美團2024面試第一題-前綴和矩陣 問題解讀 給定一個 n x n 的二進制矩陣&#xff0c;每個元素是 0 或 1。我們的任務是計算矩陣中所有邊長為 k 的子矩陣中&#xff0c;包含特定數量 1 的情況。例如&#xff0c;我們希望找到所有邊長為 k 的子矩陣中包含 k…

Java實現成績管理系統

1.思路分析實現 要求一和要求二&#xff0c;一個要求使用順序表一個使用鏈表&#xff0c;但又因為這兩個都是List的實現類&#xff0c;所以我就使用多態的形式通過一個方法進行實現上面兩種內容&#xff0c;需要用什么方法實現就傳入什么實現類&#xff0c;形參是List類型。創建…

【學習Day3】計算機基礎

?&#x1f3fb;記錄學習過程中的輸出&#xff0c;堅持每天學習一點點~ ??希望能給大家提供幫助~歡迎點贊&#x1f44d;&#x1f3fb;收藏?評論?&#x1f3fb;指點&#x1f64f; 1.5.4 Cache替換算法 Cache的頁面淘汰算法 常用替換算法有&#xff1a; ? 隨機替換算法RA…

vue3 setup 使用 beforeRouteEnter 組件內路由守衛

vue3 setup 使用 beforeRouteEnter 組件內路由守衛 setup 中只有onBeforeRouteLeave、onBeforeRouteUpdate兩個鉤子函數&#xff0c; 沒有beforeRouteEnter對應的鉤子函數&#xff0c;所以無法在setup中直接使用 <script setup> onBeforeRouteLeave((to, from) > {// …

Android基礎-性能優化

在Android平臺上進行性能優化是確保應用程序高效、穩定且流暢運行的關鍵過程。以下將詳細闡述Android性能優化的各個方面&#xff0c;包括但不限于布局優化、繪制優化、內存管理、網絡優化、安裝包優化以及針對不同版本的Android系統進行適配等。 一、布局優化 布局優化的核心…

3D軟件開發的相關技術

3D開發涉及到廣泛的技術和工具&#xff0c;涵蓋了多個領域&#xff0c;包括計算機圖形學、編程、設計、物理模擬等。以下是3D開發中常用的技術和工具&#xff0c;掌握這些技術需要廣泛的知識和實踐&#xff0c;項目的成功依賴于對這些技術的有效整合和應用。北京木奇移動技術有…

音視頻開發14 FFmpeg 視頻 相關格式分析 -- H264 NALU格式分析

H264簡介-也叫做 AVC H.264&#xff0c;在MPEG的標準?是MPEG-4的?個組成部分–MPEG-4 Part 10&#xff0c;?叫Advanced Video Codec&#xff0c;因此常常稱為MPEG-4 AVC或直接叫AVC。 原始數據YUV,RGB為什么要壓縮-知道就行 在?視頻傳輸過程中&#xff0c;視頻?件的傳輸…

熱敏電阻的設計

熱敏電阻(NTC)的作用&#xff1a;抑制開機時的浪涌電流。防止開機瞬間產生的浪涌電流損壞后面的元件。 取值依據:根據對開機的脈沖電流&#xff08;浪涌電流&#xff09;小于多少A&#xff1f; 由,這個U是指最大輸入電壓&#xff0c;I為要求的浪涌電流。 NTC是負溫度系數的熱…

收銀系統源碼--商超水果生鮮店收銀硬件要怎么選擇?

新零售時代&#xff0c;越來越多的商家開始明白&#xff0c;除了要做好店鋪定位、店面裝潢和商品的設定&#xff0c;還要選購最適合店鋪運營需求的收銀機和硬件&#xff0c;好的收銀機和收銀系統可以幫助商家做好收支統計、庫存管理、人員配置。客戶服務等工作。現在的智能收銀…