請求參數、路徑參數、查詢參數、Spring MVC/FeignClient請求相關注解梳理

目錄

      • 1 請求分類
        • 1.1 URL參數--查詢參數
        • 1.2 URL參數--路徑參數
      • 2 請求相關注解
        • 2.1 @RequestParam--查詢參數
        • 2.2 @PathVariable--路徑參數
        • 2.3 @RequestBody
        • 2.4 @Param & @RequestLine
        • 2.5 SpringMVC請求參數注解用在FeignClient里

使用SpringMVC處理http請求或使用FeignClient進行請求時,會使用到許多請求相關注解,現梳理一下以免混亂。

1 請求分類

在進行HTTP請求時,會看到“請求參數”、“查詢參數”、“路徑參數”相關字眼,那么它們之間的關系是什么呢?——請求參數是更加寬泛的概念,它包括查詢參數和路徑參數,它是指在請求中傳遞給服務器的數據,可以是URL攜帶的參數,也可以是請求體,請求數據類型可以是路徑參數(rest風格)、查詢字符串、JSON數據等,適用于GET/POST/PUT/DELETE方法。

而查詢參數和路徑參數特指請求URL攜帶的參數。

1.1 URL參數–查詢參數

查詢參數一般特指使用GET請求、以URL傳遞的查詢字符串參數,它附加在URL里,參數位于URL的 “?” 之后,由一個或多個以 & 符號分隔的鍵值對組成。如:

https://example.com/api/users?age=30&sort=name

這個URL傳遞兩個參數agesort,值分別是30name

1.2 URL參數–路徑參數

路徑參數常用在RESTful API風格中,它是URL路徑的一部分,一個形式化的路徑參數格式如下,路徑參數通常在大括號表示的地方:

https://example.com/api/users/{userId}
https://example.com/api/categories/{categoryId}/products

‘{}’部分在請求時需要填入真實的值,比如:

https://example.com/api/users/1
https://example.com/api/categories/2024/products

2 請求相關注解

請求相關注解有不少,下面逐個介紹一下。

2.1 @RequestParam–查詢參數

在后端使用@RequestParam來獲取查詢參數,對于如下請求路徑:

/api/users?sex=1&age1=30&sort=name

響應方式為:

@GetMapping("/api/users")
public List<User> getUsers(@RequestParam(required = falseint sex,@RequestParam(name= "age1", required = false) Integer age,@RequestParam("sort") String sort) {}

以上三種@RequestParam的寫法都可以,required 字段默認為true

  • sex: 當沒有給定任何注解屬性時,會默認將URL請求參數名和響應參數名稱進行映射,比如將請求參數sex映射到后端參數sex參數名必須一致)。需要注意的是雖然參數為非必須,但用的是簡單類型進行接收,如果前端未傳sex字段則會報錯,因為不能使用null賦值給簡單類型。解決方式是可以使用defaultValue屬性設置默認值或者使用包裝類型Integer進行接收【defaultValuerequired = false 搭配使用】。當沒有顯示設置required且前端未傳值時,也會嘗試賦空值。

  • age: 顯示使用兩個屬性,name規定將查詢參數“age1”映射至后端參數“age”

  • sort:比較常用的寫法。

2.2 @PathVariable–路徑參數

在后端使用@PathVariable來獲取路徑參數,對于如下請求路徑:

/api/users/1

響應方式為:

@GetMapping("/api/users/{userId}")
public User getUserById(@PathVariable String userId) {}

注意路徑變量是URL的一部分,必須提供,因此@PathVariable沒有required屬性。

2.3 @RequestBody

用于將前端的請求體攜帶的JSON數據綁定到Java對象中。

@PostMapping("/api/users")public String createUser(@RequestBody User user) {}
2.4 @Param & @RequestLine

FeignClient提供的注解,在使用Feign客戶端的時候,這兩個注解常常搭配使用。

@Param用于將方法參數綁定到請求的URL路徑參數查詢參數或請求體中,像反向的@RequestParam

@RequestLine在FeignClient里面定義HTTP請求的方法和路徑

@FeignClient(name = "user-service", url = "http://localhost:8080")
public interface UserClient {// 使用 @RequestLine 定義HTTP請求方法和路徑@RequestLine("GET /users/{id}")User getUserById(@Param("id") Long id);
} 

在使用feignclient的時候,如果@RequestLine@RequestMapping(method = RequestMethod.xxx)(或@PostMapping/@GetMapping)同時出現,會優先使用@RequestLine。因為@RequestLine屬于Feign原生注解,而@RequestMapping屬于Spring MVC注解,因此Feign在處理請求時會優先選擇屬于自己的注解規則。

2.5 SpringMVC請求參數注解用在FeignClient里

@RequestParam@PathVariable@RequestBody都屬于SpringMVC框架提供的注解,通常用于從請求里解析參數到后端方法參數,而當這些注解用在FeignClient里時,可以實現方法參數到請求的逆向綁定

@FeignClient(name = "user-service", url = "http://localhost:8080")
public interface UserClient {// 1. @RequestParam:綁定查詢參數,將方法參數 name 綁定到查詢參數 name 上@GetMapping("/users/search")User searchUser(@RequestParam("name") String name);// 2. @PathVariable:綁定路徑變量,把方法參數 id 綁定到路徑變量 {id} 上@GetMapping("/users/{id}")User getUserById(@PathVariable("id") Long id);// 3. 綁定請求體,把方法參數 user 綁定到請求體上@PostMapping("/users")User createUser(@RequestBody User user);}    

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

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

相關文章

智能指針之設計模式3

這次我們看一下智能指針是如何使用策略模式來釋放資源的&#xff0c;同時又是如何擴展功能&#xff0c;管理更多的資源對象類型的。 3、策略模式 策略模式作為一種軟件設計模式&#xff0c;指對象有某個行為&#xff0c;但是在不同的應用場景中&#xff0c;該行為有不同的實現…

華為盤古OS深度評測:構建AI自進化系統的實踐密碼

華為盤古OS通過分布式AI內核與自適應學習框架的深度耦合&#xff0c;重新定義操作系統級智能能力。實測顯示其AI任務調度效率較傳統系統提升17倍&#xff0c;本文從智能體編排、持續學習機制、端云協同架構三個維度&#xff0c;解析如何基于DevKit 3.0打造具備認知進化能力的下…

精益數據分析(28/126):解讀商業模式拼圖與關鍵指標

精益數據分析&#xff08;28/126&#xff09;&#xff1a;解讀商業模式拼圖與關鍵指標 在創業和數據分析的探索旅程中&#xff0c;每一次深入研究都可能帶來新的啟發和突破。今天&#xff0c;我們依舊帶著共同進步的初心&#xff0c;深入解讀《精益數據分析》中關于商業模式的…

GitLab Runner配置并行執行多個任務

檢查并修改方法&#xff1a; 打開 Runner 的配置文件&#xff08;通常位于 /etc/gitlab-runner/config.toml 或 ~/.gitlab-runner/config.toml&#xff09;。 確保 concurrent 值大于 1&#xff0c;例如&#xff1a; concurrent 4 # 允許最多 4 個任務同時運行重啟 Runner…

開發首個Spring Boot應用

&#x1f4cb; 前置條件 &#x1f3af; 在開始之前&#xff0c;請打開終端并運行以下命令以確保已安裝正確版本的 Java&#xff1a; $ java -version openjdk version "17.0.4.1" 2022-08-12 LTS OpenJDK Runtime Environment (build 17.0.4.11-LTS) OpenJDK 64-Bi…

【信息系統項目管理師】高分論文:論質量管理和進度管理(智慧旅游平臺建設項目)

更多內容請見: 備考信息系統項目管理師-專欄介紹和目錄 文章目錄 論文1、規劃質量管理2、質量保證3、質量控制論文 2019年3月,我作為項目經理,參加了某市智慧旅游平臺建設項目,負責項目的全面管理, 該項目以打造一流的國內外生態旅游城市為目標,旨在大數據云平臺建設的基…

DAM-3B,英偉達推出的多模態大語言模型

DAM-3B是什么 DAM-3B&#xff08;Describe Anything 3B&#xff09;是英偉達推出的一款多模態大語言模型&#xff0c;專門用于為圖像和視頻中的特定區域生成詳細描述。用戶可以通過點、邊界框、涂鴉或掩碼等方式來標識目標區域&#xff0c;從而得到精準且符合上下文的文本描述…

如何判斷你的PyTorch是GPU版還是CPU版?

如何判斷你的PyTorch是GPU版還是CPU版&#xff1f; PyTorch作為當前最流行的深度學習框架之一&#xff0c;支持在CPU和GPU(NVIDIA CUDA)上運行。對于深度學習開發者來說&#xff0c;正確識別PyTorch版本至關重要&#xff0c;因為GPU版本可以帶來10-100倍的性能提升。本文將全面…

Gin框架

Gin 快速入門 go get -u github.com/gin-gonic/gin package main import gin "github.com/gin-gonic/gin"func main() {engine : gin.Default()engine.GET("/", func(c *gin.Context) {c.String(200, "Hello Gin")})engine.Run(":8888&q…

【Project】基于spark-App端口懂車帝數據采集與可視化

文章目錄 hadoop完全分布式部署hdfs-site.xmlcore-site.xmlmarpred-site.xmlyarn-site.xml spark集群部署spark-env.sh mongodb分片模式部署config 服務器初始化config 副本集 shard 服務器初始化shard 副本集 mongos服務器添加shard設置chunk大小 啟動分片為集合 user 創建索引…

brew 安裝openjdk查看其版本

使用brew&#xff08;如果你使用Homebrew安裝&#xff09; 如果你通過Homebrew安裝了OpenJDK&#xff0c;可以使用以下命令來查看安裝的版本,&#xff1a; brew list --versions openjdk8 這將會列出所有通過Homebrew安裝的OpenJDK版本及其版本號。 3. 查看/usr/libexec/ja…

【Linux網絡】構建與優化HTTP請求處理 - HttpRequest從理解到實現

&#x1f4e2;博客主頁&#xff1a;https://blog.csdn.net/2301_779549673 &#x1f4e2;博客倉庫&#xff1a;https://gitee.com/JohnKingW/linux_test/tree/master/lesson &#x1f4e2;歡迎點贊 &#x1f44d; 收藏 ?留言 &#x1f4dd; 如有錯誤敬請指正&#xff01; &…

Day12(回溯法)——LeetCode51.N皇后39.組合總和

1 前言 今天刷了三道回溯法和一道每日推薦&#xff0c;三道回溯法也迷迷糊糊的&#xff0c;每日推薦把自己繞進去了&#xff0c;雖然是一道之前做過的題的變種。刷的腦子疼。。。今天挑兩道回溯題寫一下吧&#xff0c;其中有一道是之前做過的N皇后&#xff0c;今天在詳細寫一寫…

初階數據結構:二叉搜索樹

目錄 概念 性能 效率分析 二分缺陷 功能 插入 查找 刪除 實現 應用 概念 二叉搜索樹&#xff08;又稱&#xff1a;二叉排序樹&#xff09;&#xff0c;是由一些具有特別性質的二叉樹衍變而來。 只要一棵二叉樹具備以下性質&#xff0c;即可稱作二叉搜索樹。 【1】若…

詳解springcloud gateway工作原理、斷言、filter、uri、id、全局跨域、globalfilter等以及關鍵源碼實現

1.gateway概念 網關就是當前微服務項目的"統一入口"程序中的網關就是當前微服務項目對外界開放的統一入口所有外界的請求都需要先經過網關才能訪問到我們的程序提供了統一入口之后,方便對所有請求進行統一的檢查和管理 2. 網關的主要功能 將所有請求統一經過網關網…

C#中的弱引用使用

弱引用&#xff08;Weak Reference&#xff09;是一種特殊的引用類型&#xff0c;它允許你引用一個對象&#xff0c;但不會阻止該對象被垃圾回收器&#xff08;GC&#xff09;回收。弱引用通常用于需要緩存或跟蹤對象&#xff0c;但又不希望因保留引用而導致內存泄漏的場景。弱…

spring響應式編程系列:異步生產數據

目錄 示例 大致流程 create new MonoCreate subscribe new LambdaMonoSubscriber monoCreate.subscribe accept success onNext 時序圖 類圖 數據發布者 MonoCreate 數據訂閱者 LambdaMonoSubscriber 訂閱的消息體 DefaultMonoSink 本篇文章我們來研究如何將…

MCP Python SDK構建的**SQLite瀏覽器**的完整操作指南

以下是使用MCP Python SDK構建的SQLite瀏覽器的完整操作指南&#xff1a; 一、環境準備 安裝依賴 # 安裝MCP SDK及SQLite支持 pip install mcp sqlite3創建測試數據庫 sqlite3 test.db <<EOF CREATE TABLE users (id INTEGER PRIMARY KEY, name TEXT, email TEXT); IN…

【Python爬蟲基礎篇】--3.cookie和session

目錄 1.cookie 1.1.定義 1.2.參數 1.3.分類 2.session 3.使用cookie登錄微博 4.使用session登錄 1.cookie 由于http是一個無狀態的協議&#xff0c;請求與請求之間無法相互傳遞或者記錄一些信息&#xff0c;cookie和session正是為了解決這個問題而產生。 例子&#xff1…

風車郵箱系統詳細使用指南:Windows與Ubuntu雙平臺解析

風車郵箱系統V1.2使用手冊 風車郵箱系統詳細使用指南&#xff1a;Windows與Ubuntu雙平臺解析 前言 在日常網絡活動中&#xff0c;我們經常需要一個臨時郵箱來注冊各類網站或接收驗證碼&#xff0c;但不想使用自己的真實郵箱。「風車無線郵箱系統」作為一款優秀的臨時郵箱工具…