springboot系列九: 接收參數相關注解

文章目錄

  • 基本介紹
  • 接收參數相關注解應用實例
      • @PathVariable
      • @RequestHeader
      • @RequestParam
      • @CookieValue
      • @RequestBody
      • @RequestAttribute
      • @SessionAttribute
  • 復雜參數
    • 基本介紹
    • 應用實例
  • 自定義對象參數-自動封裝
    • 基本介紹
    • 應用實例

在這里插入圖片描述

基本介紹

1.SpringBoot 接收客戶端提交數據 / 參數會使用到相關注解.

2.詳細學習 @PathVariable, @RequestHeader, @ModelAttribute, @RequestParam, @CookieValue, @RequestBody

接收參數相關注解應用實例

●需求:
演示各種方式提交數據/參數給服務器, 服務器如何使用注解接收

@PathVariable

1.創建src/main/resources/public/index.html
JavaWeb系列十: web工程路徑專題

<h1>跟著老韓學springboot</h1>
基本注解:
<hr/>
<!--1. web工程路徑知識:2. / 會解析成 http://localhost:80803. /monster/100/king => http://localhost:8080/monster/100/king4. 如果不帶 /, 會以當前路徑為基礎拼接
/-->
<a href="/monster/100/king">@PathVariable-路徑變量 monster/100/king</a><br/><br/>
</body>

2.創建src/main/java/com/zzw/springboot/controller/ParameterController.java
url占位符回顧

@RestController
public class ParameterController {/*** 1./monster/{id}/{name} 構成完整請求路徑* 2.{id} {name} 就是占位變量* 3.@PathVariable("name"): 這里 name 和 {name} 命名保持一致* 4.String name_ 這里自定義, 這里韓老師故意這么寫* 5.@PathVariable Map<String, String> map 把所有傳遞的值傳入map* 6.可以看下@pathVariable源碼* @return*/@GetMapping("/monster/{id}/{name}")public String pathVariable(@PathVariable("id") Integer id,@PathVariable("name") String name,@PathVariable Map<String, String> map) {System.out.println("id = " + id + "\nname = " + name + "\nmap = " + map);return "success";}
}

3.測試 http://localhost:8088/monster/100/king

在這里插入圖片描述
在這里插入圖片描述

@RequestHeader

需求: 演示@RequestHeader使用.

1.修改src/main/resources/public/index.html

<a href="/requestHeader">@RequestHeader-獲取http請求頭</a><br/><br/>

2.修改ParameterController.java
JavaWeb系列八: WEB 開發通信協議(HTTP協議)

/*** 1. @RequestHeader("Cookie") 獲取http請求頭的 cookie信息* 2. @RequestHeader Map<String, String> header 獲取到http請求的所有信息*/
@GetMapping("/requestHeader")
public String requestHeader(@RequestHeader("Host") String host,@RequestHeader Map<String, String> header) {System.out.println("host = " + host + "\nheader = " + header);return "success";
}

3.測試

在這里插入圖片描述
在這里插入圖片描述

@RequestParam

需求: 演示@RequestParam使用.

1.修改src/main/resources/public/index.html

<a href="/hi?name=趙志偉&fruit=apple&fruit=pear&address=上海&id=3">@RequestParam-獲取請求參數</a><br/><br/>

2.修改ParameterController.java
SpringMVC系列五: SpringMVC映射請求數據

/*** 如果我們希望將所有的請求參數的值都獲取到, 可以通過* @RequestParam Map<String, String> params*/
@GetMapping("/hi")
public String hi(@RequestParam(value = "name") String username,@RequestParam(value = "fruit") List<String> fruits,@RequestParam Map<String, String> params) {System.out.println("username = " + username + "\nfruits = "+ fruits + "\nparams = " + params);return "success";
}

3.測試

在這里插入圖片描述
在這里插入圖片描述

@CookieValue

需求: 演示@CookieValue使用.

1.修改src/main/resources/public/index.html

<a href="/cookie">@CookieValue-獲取cookie值</a>

2.修改ParameterController.java
JavaWeb系列十一: Web 開發會話技術(Cookie, Session)

/*** 因為我們的瀏覽器目前沒有cookie, 我們可以自己設置cookie* 如果要測試, 可以先寫一個方法, 在瀏覽器創建對應的cookie* 說明:* 1. value = "cookie_key" 表示接收名字為 cookie_key的cookie* 2. 如果瀏覽器攜帶來對應的cookie, 那么后面的參數是String, 則接收到的是對應的value* 3. 后面的參數是Cookie, 則接收到的是封裝好的對應的cookie*/
@GetMapping("/cookie")
public String cookie(@CookieValue(value = "cookie_key") String cookie_value,@CookieValue(value = "username") Cookie cookie,HttpServletRequest request) {System.out.println("cookie_value = " + cookie_value+ "\nusername = " + cookie.getName() + "-" + cookie.getValue());Cookie[] cookies = request.getCookies();for (Cookie cookie1 : cookies) {System.out.println("cookie1 = " + cookie1.getName() + "-" + cookie1.getValue());}return "success";
}

3.測試
在這里插入圖片描述
在這里插入圖片描述

@RequestBody

需求: 演示@RequestBody使用.

1.修改src/main/resources/public/index.html

<h1>測試@RequestBody獲取數據: 獲取POST請求體</h1>
<form action="/save" method="post">名字: <input type="text" name="name"><br/>年齡: <input type="text" name="age"><br/><input type="submit" value="提交"/>
</form>

2.修改ParameterController.java
SpringMVC系列十: 中文亂碼處理與JSON處理

/*** @RequestBody 是整體取出Post請求內容*/
@PostMapping("/save")
public String postMethod(@RequestBody String content) {System.out.println("content = " + content);//content = name=zzw&age=23return "sucess";
}

3.測試

在這里插入圖片描述

content = name=zzw&age=123

@RequestAttribute

需求: 演示@RequestAttribute使用. 獲取request域的屬性.

1.修改src/main/resources/public/index.html

<a href="/login">@RequestAttribute-獲取request域屬性</a>

2.創建RequestController.java
SpringMVC系列十: 中文亂碼處理與JSON處理

@Controller
public class RequestController {@RequestMapping("/login")public String login(HttpServletRequest request) {request.setAttribute("user", "趙志偉");//向request域中添加的數據return "forward:/ok";//請求轉發到 /ok}@GetMapping("/ok")@ResponseBodypublic String ok(@RequestAttribute(value = "user", required = false) String username,HttpServletRequest request) {//獲取到request域中的數據System.out.println("username--" + username);System.out.println("通過servlet api 獲取 username-" + request.getAttribute("user"));return "success"; //返回字符串, 不用視圖解析器}
}

3.測試…

@SessionAttribute

需求: 演示@SessionAttribute使用. 獲取session域的屬性.

1.修改src/main/resources/public/index.html

<a href="/login">@SessionAttribute-獲取session域屬性</a>

2.創建RequestController.java
JavaWeb系列十一: Web 開發會話技術(Cookie, Session)

@Controller
public class RequestController {@RequestMapping("/login")public String login(HttpServletRequest request, HttpSession session) {request.setAttribute("user", "趙志偉");//向request域中添加的數據session.setAttribute("mobile", "黑莓");//向session域中添加的數據return "forward:/ok";//請求轉發到 /ok}@GetMapping("/ok")@ResponseBodypublic String ok(@RequestAttribute(value = "user", required = false) String username,HttpServletRequest request,@SessionAttribute(value = "mobile", required = false) String mobile,HttpSession session) {//獲取到request域中的數據System.out.println("username--" + username);System.out.println("通過servlet api 獲取 username-" + request.getAttribute("user"));//獲取session域中的數據System.out.println("mobile--" + mobile);System.out.println("通過HttpSession 獲取 mobile-" + session.getAttribute("mobile"));return "success"; //返回字符串, 不用視圖解析器}
}

3.測試…

復雜參數

基本介紹

1.在開發中, SpringBoot在相應客戶端請求時, 也支持復雜參數

2.Map, Model, Errors/BindingResult, RedirectAttributes, ServletResponse, SessionStatus, UriComponentsBuilder, ServletUriComponentBuilder, HttpSession.

3.Map, Model,數據會被放在request域, 到時Debug一下.

4.RedirectAttribute 重定向攜帶數據

應用實例

說明: 演示復雜參數的使用.
重點: Map, Model, ServletResponse

●代碼實現
1.修改src/main/java/com/zzw/springboot/controller/RequestController.java
SpringMVC系列六: 模型數據

//響應一個注冊請求
@GetMapping("/register")
public String register(Map<String, Object> map,Model model,HttpServletRequest request) {//如果一個注冊請求, 會將注冊數據封裝到map或者model//map中的數據和model中的數據, 會被放入到request域中map.put("user", "趙志偉");map.put("job", "java");model.addAttribute("sal", 6000);//一會我們再測試response使用//請求轉發return "forward:/registerOk";
}@GetMapping("/registerOk")
@ResponseBody
public String registerOk(HttpServletRequest request,@RequestAttribute("user") String user,@RequestAttribute("job") String job,@RequestAttribute("sal") Double sal) {System.out.println("user=" + request.getAttribute("user"));System.out.println("job=" + job);System.out.println("sal=" + sal);return "success";
}

2.瀏覽器輸入 http://localhost:8088/register , 打斷點測試

SpringMVC系列十三: SpringMVC執行流程 - 源碼分析

在這里插入圖片描述

進入目標方法

在這里插入圖片描述

剖析 request 對象

在這里插入圖片描述

3.繼續修改 register()方法
JavaWeb系列十一: Web 開發會話技術(Cookie, Session)

//響應一個注冊請求
@GetMapping("/register")
public String register(Map<String, Object> map,Model model,HttpServletRequest request,HttpServletResponse response) throws UnsupportedEncodingException {//如果一個注冊請求, 會將注冊數據封裝到map或者model//map中的數據和model中的數據, 會被放入到request域中map.put("user", "趙志偉");map.put("job", "java");model.addAttribute("sal", 6000);//一會我們再測試response使用//演示創建cookie, 并通過response 添加到瀏覽器/客戶端Cookie cookie = new Cookie("email", "978964140@qq.com");response.addCookie(cookie);//請求轉發return "forward:/registerOk";
}

4.測試

在這里插入圖片描述

自定義對象參數-自動封裝

基本介紹

1.在開發中, SpringBoot在響應客戶端/瀏覽器請求時, 也支持自定義對象參數

2.完成自動類型轉換與格式化

3.支持級聯封裝

應用實例

●需求說明:
演示自定義對象參數使用,完成自動封裝,類型轉換。

●代碼實現
1.創建public/save.html

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>添加妖怪</title>
</head>
<body>
<form action="?" method="?">編號: <input name="" value=""><br/>姓名: <input name="" value=""><br/>年齡: <input name="" value=""><br/>婚否: <input name="" value=""><br/>生日: <input name="" value=""><br/>坐騎名稱: <input name="" value=""><br/>坐騎價格: <input name="" value=""><br/><input type="submit" value="保存"/>
</form>
</body>
</html>

2.創建src/main/java/com/zzw/springboot/bean/Car.java

@Data
public class Car {private String name;private Double price;
}

3.創建src/main/java/com/zzw/springboot/bean/Monster.java

@Data
public class Monster {private Integer id;private String name;private Integer age;private Boolean maritalStatus;private Date birthday;private Car car;
}

4.修改ParameterController.java

//處理添加monster的方法
@PostMapping("/saveMonster")
public String saveMonster(Monster monster) {System.out.println("monster = " + monster);return "success";
}

5.回填public/save.html

<form action="saveMonster" method="post">編號: <input name="id" value="100"><br/>姓名: <input name="name" value="張三"><br/>年齡: <input name="age" value="30"><br/>婚否: <input name="maritalStatus" value="未婚"><br/>生日: <input name="birthday" value="1994-01-01"><br/><input type="submit" value="保存"/>
</form>

6.自動封裝需要用到自定義轉換器. 接下來, 繼續學習自定義轉換器.


🔜 下一篇預告: [即將更新,敬請期待]


📚 目錄導航 📚

  1. springboot系列一: springboot初步入門
  2. springboot系列二: sprintboot依賴管理
  3. springboot系列三: sprintboot自動配置
  4. springboot系列四: sprintboot容器功能
  5. springboot系列五: springboot底層機制實現 上
  6. springboot系列六: springboot底層機制實現 下
  7. springboot系列七: Lombok注解,Spring Initializr,yaml語法
  8. springboot系列八: springboot靜態資源訪問,Rest風格請求處理, 接收參數相關注解

💬 讀者互動 💬
在學習 Spring Boot 靜態資源訪問和 Rest 風格請求處理的過程中,您有哪些新的發現或疑問?歡迎在評論區留言,讓我們一起討論吧!😊


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

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

相關文章

【小白也能看的懂】想要玩轉AI大模型,這4招你得知道

前言 對于大部分人來說&#xff0c;能夠靈活使用AI工具&#xff0c;并對自己每個常用的AI工具優劣勢很清楚&#xff0c;就已經足夠了。不過&#xff0c;畢竟AI發展實在太快&#xff0c;多了解一些相關的知識點&#xff0c;以全局的視角去看AI&#xff0c;可以避免管中窺豹&…

編程語言現狀:深入剖析與未來展望

編程語言現狀&#xff1a;深入剖析與未來展望 在數字化時代的浪潮中&#xff0c;編程語言作為信息科技領域的基石&#xff0c;正經歷著前所未有的變革與發展。本文將從四個方面、五個方面、六個方面和七個方面&#xff0c;深入剖析編程語言的現狀&#xff0c;并展望其未來的發…

【錯題集-編程題】買賣股票的最好時機(四)(動態規劃)

力扣對應題目鏈接&#xff1a;188. 買賣股票的最佳時機 IV - 力扣&#xff08;LeetCode&#xff09; 牛客對應題目鏈接&#xff1a;買賣股票的最好時機(四)_牛客題霸_牛客網 (nowcoder.com) 一、分析題目 1、狀態表示 為了更加清晰的區分買入和賣出&#xff0c;我們換成有股…

【鴻蒙學習筆記】通過用戶首選項實現數據持久化

官方文檔&#xff1a;通過用戶首選項實現數據持久化 目錄標題 使用場景第1步&#xff1a;源碼第2步&#xff1a;啟動模擬器第3步&#xff1a;啟動entry第6步&#xff1a;操作樣例2 使用場景 Preferences會將該數據緩存在內存中&#xff0c;當用戶讀取的時候&#xff0c;能夠快…

springboot對象參數賦值變化

java springboot 項目&#xff0c; 通過接口修改Person類 name值&#xff0c; 在別的類中&#xff0c;注入Person類 Resource Person person&#xff0c; 為什么拿不到 接口修改的 name的值&#xff0c;是Person類 不同的對象造成的 嗎 參數對象和注入對象區別 Person類&…

云WAF | 云waf基礎知識詳解

隨著數字時代的到來&#xff0c;網絡安全問題越來越突出&#xff0c; Web應用防火墻&#xff08;WAF&#xff09;是保障 Web應用安全的一道重要防線。在云計算環境下&#xff0c;云環路由云平臺&#xff08;WAF&#xff09;的出現&#xff0c;其融合了 WAF的能力和云計算的靈活…

【Linux】IP地址與主機名

文章目錄 1.IP地址2.特殊IP地址3.主機名4.域名解析 1.IP地址 每一臺聯網的電腦都會有一個地址&#xff0c;用于和其它計算機進行通訊 IP地址主要有2個版本&#xff0c;V4版本和V6版本 IPv4版本的地址格式是&#xff1a;a.b.c.d,其中abcd表示0~255的數字&#xff0c;如192.168.…

PS 2024【最新】中文白嫖版!,安裝教程,圖文步驟

文章目錄 軟件介紹軟件下載安裝步驟 軟件介紹 Photoshop&#xff0c;簡稱“PS” Adobe Photoshop&#xff0c;簡稱“PS”&#xff0c;是由Adobe Systems開發和發行的圖像處理軟件。Photoshop主要處理以像素所構成的數字圖像。使用其眾多的編修與繪圖工具&#xff0c;可以有效地…

利用AI快速上手新項目:開發者的高效指南

使用AI幫助開發者熟悉新的項目 在現代軟件開發中&#xff0c;開發者經常需要快速熟悉一個新的項目。項目可能包含復雜的結構和大量的文件&#xff0c;這對新手開發者來說無疑是一項挑戰。幸運的是&#xff0c;借助AI技術&#xff0c;我們可以更加高效地了解項目結構&#xff0…

道路運輸企業管理人員安全考核試題(附答案)

1、【多選題】《道路旅客運輸企業安全管理規范》規定&#xff0c;客運企業應當制定車輛動態監控操作規程。操作規程的內容包括( )。(ABCD) A、衛星定位裝置、視頻監控裝置、動態監控平臺設備的檢修和維護要求 B、動態監控信息采集、分析、處理規范和流程 C、違法違規信息統…

探索Facebook在人工智能領域的最新進展

在當今快速發展的科技領域中&#xff0c;人工智能&#xff08;AI&#xff09;作為一項關鍵技術&#xff0c;正在逐步改變著社交媒體的面貌。作為全球最大的社交平臺之一&#xff0c;Facebook積極探索和應用人工智能&#xff0c;以提升用戶體驗、增強平臺安全性并推動技術創新。…

Nodejs 第八十四章(ElasticSearch搜索)

ElasticSearch基本用法在之前的篇章介紹過了 這里不在過多闡述 模擬假數據 安裝庫 faker-js/faker 模擬假數據的一個庫非常好用支持中文使用中文 locale: [zh_CN], 設置即可生成名字&#xff0c;郵箱&#xff0c;手機號&#xff0c;id&#xff0c;年齡&#xff0c;性別生成完成…

ATT 和 GATT:數據表示和交換

背景介紹 BLE的通信和以太網&#xff0c;wifi有個重大的不同是&#xff1a;BLE通信的設備往往有特定的功能。且這個功能不會在運行中發生變化。 因此藍牙設備通信的時候&#xff0c;只能訪問預先定義好的&#xff08;也就是配置文件profile&#xff09;的功能。 那profile里寫…

批量制作word表格

問題背景 將excel表中的成績內容制作為成績單&#xff0c;每頁對應一個學員的成績&#xff0c;方便打印 代碼實現 ## 導入包 import pandas as pd from docx import Document from docx.enum.text import WD_ALIGN_PARAGRAPH,WD_LINE_SPACING# 讀取 Excel 內容 df pd.read_e…

APP接入聚合廣告SDK會影響上架應用市場嗎?

SDK是移動互聯網的基本技術接入方式&#xff0c;而廣告聚合SDK僅是實現廣告請求返回的功能&#xff0c;所以本身不會有任何問題&#xff0c;而各家應用市場會對具體的廣告展現方式等會有不同的要求&#xff0c;開發者可以根據具體的市場需要要求廣告平臺來配合進行相關設置即可…

精通 mysqldumpslow:深度分析 MySQL 慢查詢日志

引言 在數據庫管理與優化的領域中&#xff0c;慢查詢日志是識別性能瓶頸的金礦。mysqldumpslow 工具是挖掘這座金礦的利器&#xff0c;它幫助我們分析 MySQL 慢查詢日志并提取關鍵信息。本文將詳細介紹 mysqldumpslow 的核心選項&#xff0c;并通過實例展示如何使用這些選項來…

IP 地址:優化網絡游戲

IP地址和網絡游戲 在現代網絡游戲中&#xff0c;IP地址不僅用于服務器分配&#xff0c;還能針對性進行玩家匹配與優化網絡延遲。本文將探討IP地址在網絡游戲中的具體應用。 *服務器分配* 全球服務器分布&#xff1a; 網絡游戲需要在全球范圍內提供快速、穩定的連接&#xff…

筆記

https://qoj.ac/problem/8008 不難發現&#xff0c; 隨機到某些位置&#xff0c;之后最短路 先O&#xff08;nm&#xff09;預處理出能到的點&#xff0c; 考慮最小的隨機位置 首先&#xff0c;我們將求和式進行展開&#xff1a; ∑ j 1 ∞ j ( n ? i n ) j ? 1 i n \s…

libcoap3對接華為云平臺

文章目錄 前言一、平臺注冊二、引入源碼庫1.libcoap倉庫編譯2.分析網絡報文3.案例代碼4.編譯&運行 總結 前言 通過libcoap3開源代碼庫對接華為云平臺&#xff0c;本文章將討論加密與不加密的方式對接華為云平臺。 一、平臺注冊 首先&#xff0c;你需要在華為云平臺上創建…

文華財經盤立方博易大師boll布林帶指標公式源碼

TT:TIME>850&&TIME<1150; MID:MA(CLOSE,26);//求N個周期的收盤價均線&#xff0c;稱為布林通道中軌 TMP2:STD(CLOSE,26);//求M個周期內的收盤價的標準差 TOP:MID2*TMP2;//布林通道上軌 BOTTOM:MID-2*TMP2;//布林通道下軌 A:EVERY(ISDOWN,2)&&TT&&…