記錄Spring Boot中的API請求參數讀取方式

一、背景

項目開發中經常使用Spring Boot開發API,所以讀取請求參數是服務端編碼中最基本最常見的操作項,Spring Boot中也提供多種機制來滿足不同的API設計要求。接下來就記錄一下項目中用過的6種請求參數讀取方式。

@RequestParam

用來加載請求URL中"?"之后的參數。比如:這個請求 /user?name=abc 就可以如下面這樣,使用@RequestParam來加載URL中的name參數:

@GetMapping("/user")
@ResponseBody
public User findUserByName(@RequestParam("name") String name){ return userRepo.findByName(name);
}
@PathVariable

RESTful風格API中常用的注解,用來加載URL路徑中的參數。比如:這個請求/user/1 就可以如下面這樣,使用@PathVariable來加載URL中的id參數:

@GetMapping("/user/{id}")
@ResponseBody
public User findUserById(@PathVariable("id") String id){ return userRepo.findById(id);
}
@MatrixVariable

用的并不是很多,有些國外系統有提供這類API參數,這種API的參數通過;分割。
比如:請求/books/reviews;id=1234;topN=5; 就可以如下面這樣,使用@MatrixVariable來加載URL中用;分割的參數:

@GetMapping("/books/reviews")
@ResponseBody
public List<BookReview> getBookReviews( @MatrixVariable String id,  @MatrixVariable Integer topN) {return bookReviewsLogic.getTopNReviewsByIsbn(isbn, topN);
}
@RequestBody

用來加載POST/PUT請求的復雜請求體(也叫:payload)。比如,客戶端需要提交一個復雜數據的時候,就要將這些數據放到請求體中,然后服務端用@RequestBody來加載請求體中的數據

@PostMapping("/add")
public boolean addAccounts(@RequestBody List<Account> accounts) throws SQLException {accounts.stream().forEach(a -> {a.setCreatedOn(Timestamp.from(Instant.now()));a.setLastLogin(Timestamp.from(Instant.now()));});return notificationLogic.addAccounts(accounts);
}
@RequestHeader

用來加載請求頭中的數據,在業務系統中不太使用,但在基礎設施的建設中或者鑒權請求中會比較常用,比如傳遞分布式系統的TraceID等。比如,假設將鑒權數據存在http請求頭中,就可以用@RequestHeader來加載請求頭中的Authorization參數:

@GetMapping("/user")
@ResponseBody()
public List<User> getUserList(@RequestHeader("Authorization") String authToken) {return userRepo.findAll();
}
@CookieValue

需要與客戶端保持有狀態的交互時,就需要用到Cookie。此時,服務端讀取Cookie數據的時候,就可以用@CookieValue來讀取Cookie中的SessionId數據:

@GetMapping("/user")
@ResponseBody()
public List<User> getUserList(@CookieValue(name = "SessionId") String sessionId) {return userRepo.findAll();
}

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

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

相關文章

2024年6月24日-6月30日(ue5肉鴿視頻p16-p25)

試過重點放在獨立游戲上&#xff0c;有個indienova獨立游戲團隊是全職的&#xff0c;由于他們干了幾個月&#xff0c;節奏暫時跟不上&#xff0c;緊張焦慮了。五一時也有點自暴自棄了&#xff0c;實在沒必要&#xff0c;按照自己的節奏走即可。精力和時間也有限&#xff0c;放在…

Python和tkinter實現的字母記憶配對游戲

Python和tkinter實現的字母記憶配對游戲 因為這個小游戲用到了tkinter&#xff0c;先簡要介紹一下它。tkinter是Python的標準GUI(圖形用戶界面)庫&#xff0c;它提供了一種簡單而強大的方式來創建圖形界面應用程序。它提供了創建基本圖形界面所需的所有工具&#xff0c;同時保…

OSI七層模型TCP/IP四層面試高頻考點

OSI七層模型&TCP/IP四層&面試高頻考點 1 OSI七層模型 1. 物理層&#xff1a;透明地傳輸比特流 在物理媒介上傳輸原始比特流&#xff0c;定義了連接主機的硬件設備和傳輸媒介的規范。它確保比特流能夠在網絡中準確地傳輸&#xff0c;例如通過以太網、光纖和無線電波等媒…

什么是有效的電子簽名?PDF電子簽名怎樣具備法律效力?

電子簽名逐漸成為商務文書和法律文件中不可或缺的一部分。《電子簽名法》自2005年4月1日起施行&#xff0c;這一立法是中國信息化法律的重要里程碑&#xff0c;為電子簽名應用奠定了法律基礎。電子簽名不僅僅是一種技術手段&#xff0c;更是一種法律認可的簽名形式。那么究竟什…

js生成UUID確保數據的唯一性

在JavaScript中&#xff0c;生成UUID&#xff08;Universally Unique Identifier&#xff09;通常用于確保數據的唯一性。 以下是一個簡單的使用JavaScript生成UUID的示例&#xff0c;它基于RFC 4122版本4&#xff08;隨機UUID&#xff09;的算法&#xff1a; function gener…

Python私教張大鵬 PyWebIO通過事件回調實現表格的編輯和刪除功能

從上面可以看出&#xff0c;PyWebIO把交互分成了輸入和輸出兩部分&#xff1a;輸入函數為阻塞式調用&#xff0c;會在用戶瀏覽器上顯示一個表單&#xff0c;在用戶提交表單之前輸入函數將不會返回&#xff1b;輸出函數將內容實時輸出至瀏覽器。這種交互方式和控制臺程序是一致的…

學習TTS遇到的問題2 什么是TCN模型

學習TTS遇到的問題2 什么是TCN模型 什么是TCN模型怎么理解 TCN中的 dilation&#xff1f;什么是 Dilation具體例子數學表達作用例子代碼示例 什么是TCN模型 https://juejin.cn/post/7262269863343079479 https://blog.csdn.net/weixin_57726558/article/details/132163074 由下…

出手便是王炸,曙光存儲將高端存儲推向新高度

二十年磨一劍&#xff0c;今朝試鋒芒。 近日&#xff0c;曙光存儲重磅發布全球首個億級IOPS集中式全閃存儲FlashNexus&#xff0c;正式宣告進入高端存儲市場。 作為存儲產業皇冠上的明珠&#xff0c;高端存儲一向以技術難度大、市場準入門檻高和競爭格局穩定著稱&#xff0c;…

從0-1搭建一個web項目(package.json)詳解

本章分析package.json文件詳解 本文主要對packge.json配置子文件詳解 ObJack-Admin一款基于 Vue3.3、TypeScript、Vite3、Pinia、Element-Plus 開源的后臺管理框架。在一定程度上節省您的開發效率。另外本項目還封裝了一些常用組件、hooks、指令、動態路由、按鈕級別權限控制等…

Centos7源碼方式安裝sqle及開發相關

官方文檔-源碼安裝 操作系統&#xff1a;centos:7.9,everything (DVD版應該也可以) (在ubuntu22.04裝了兩天之后乖乖開了一個新Centos7虛擬機) 鏡像&#xff1a;清華大學開源軟件鏡像站 centos/7.9.2009 安裝git sudo yum update -y sudo yum install -y git git --version安…

數據結構與算法筆記:高級篇 - B+樹:MySql數據庫索引是如何實現的?

概述 作為一名軟件開發工程師&#xff0c;你對數據庫肯定再熟悉不過了。MySQL 作為主流的數據庫存儲系統&#xff0c;它在我們的業務開發中&#xff0c;有著舉足輕重的地位。在工作中&#xff0c;為了加速數據庫中數據的查找速度&#xff0c;我們常用的處理思路是&#xff0c;…

01.Ambari自定義服務開發-項目初始化

文章目錄 基礎環境在PyCharm中初始化項目配置項目相關依賴在PyCharm中導入依賴 基礎環境 PyCharmPython 2.7已經安裝完成的Ambari服務端 在PyCharm中初始化項目 項目名稱就是我們要安裝服務的名稱&#xff0c;要求名稱為全大寫&#xff0c;如&#xff1a;DORIS創建Python2.7…

如何實現機房的自動化運維-青島佰優聯

要讓機房更穩定地實現自動化運維&#xff0c;可以參考以下幾點建議&#xff1a; 一、實施自動化運維工具和技術 1. 配置管理工具&#xff1a; - 使用如Ansible、Puppet、Chef等開源的自動化運維工具&#xff0c;進行服務器配置的管理。這些工具可以幫助管理員快速部署、更…

龍迅LT8711V TYPE-CDP 1.2轉VGA芯片,內置MCU,成熟批量產品

龍迅LT8711V描述&#xff1a; LT8711V是一種高性能的Type-C/DP1.2到VGA轉換器&#xff0c;設計用于連接USB Type-C源或DP1.2源到VGA接收器。LT8711V集成了一個DP1.2兼容的接收器&#xff0c;和一個高速三通道視頻DAC。此外&#xff0c;還包括兩個CC控制器&#xff0c;用于CC通…

XML selectNodes 模糊查找

public static XmlElement[] FuzzyFindNode(string xmlPath, string key, string valuenull){XmlDocument xmlDoc new XmlDocument();xmlDoc.Load(xmlPath); string xpath $"//節點名字[contains({key},{value})]"; XmlNodeList nodes xmlDoc.SelectNodes(xpath)…

圖像大小調整(縮放)

尺寸調整前尺寸調整前 1、背景介紹 在深度學習中&#xff0c;將圖像調整到固定尺寸&#xff08;如28x28像素&#xff09;的操作是非常常見的&#xff0c;尤其是在處理諸如圖像分類、物體檢測和圖像分割等任務時。這種操作有幾個重要原因&#xff1a; 標準化輸入&#xff1a;許…

【可控圖像生成系列論文(五)】ControlNet 和 IP-Adapter 之間的區別有哪些?

系列文章目錄 【可控圖像生成系列論文&#xff08;一&#xff09;】 簡要介紹了 MimicBrush 的整體流程和方法&#xff1b;【可控圖像生成系列論文&#xff08;二&#xff09;】 就MimicBrush 的具體模型結構、訓練數據和紋理遷移進行了更詳細的介紹。【可控圖像生成系列論文&…

【漏洞復現】銳捷統一上網行為管理與審計系統——遠程命令執行漏洞

聲明&#xff1a;本文檔或演示材料僅供教育和教學目的使用&#xff0c;任何個人或組織使用本文檔中的信息進行非法活動&#xff0c;均與本文檔的作者或發布者無關。 文章目錄 漏洞描述漏洞復現測試工具 漏洞描述 銳捷統一上網行為管理與審計系統naborTable/static_convert.php…

如何應對瀏覽器提示的“存在不安全腳本”問題

哈嘍呀&#xff0c;大家好&#xff0c;淼淼又來和大家見面啦&#xff0c;咱們在互聯網瀏覽過程中&#xff0c;您或許會遇到瀏覽器彈出的安全警告&#xff0c;提示頁面中包含“不安全腳本”。這樣的信息往往讓人心生警惕&#xff0c;擔心自己的隱私和數據安全受到威脅。本文將為…

Linux系統編程(七)進程間通信IPC

進程間通訊的7種方式_進程間通信的幾種方法-CSDN博客 管道 pipe&#xff08;命名管道和匿名管道&#xff09;&#xff1b;信號 signal&#xff1b;共享內存&#xff1b;消息隊列&#xff1b;信號量 semaphore&#xff1b;套接字 socket&#xff1b; 1. 管道 內核提供&#x…