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、創建 業務處理器 Controller類
5、測試
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;}
}
- 指定默認值
@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
- 允許為空
@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接收