【SpringBoot】請求參數

1. BS 架構

BS架構:Browser/Server,瀏覽器/服務器架構模式。客戶端只需要瀏覽器,應用程序的邏輯和數據都存儲在服務端。

在SpringBoot進行web程序開發時,它內置了一個核心的Servlet程序 DispatcherServlet,稱之為 核心控制器。

DispatcherServlet 負責接收頁面發送的請求,然后根據執行的規則,將請求再轉發給后面的請求處理器Controller,請求處理器處理完請求之后,最終再由DispatcherServlet給瀏覽器響應數據。

在這里插入圖片描述

瀏覽器發送請求,會攜帶請求數據,包括:請求行、請求頭;請求到達tomcat之后,tomcat會負責解析這些請求數據,將解析后的請求數據會傳遞給Servlet程序的HttpServletRequest對象,那也就意味著 HttpServletRequest 對象就可以獲取到請求數據。

Tomcat 還給Servlet程序傳遞了一個參數 HttpServletResponse,通過這個對象,我們就可以給瀏覽器設置響應數據 。

在這里插入圖片描述

2. 簡單參數

簡單參數,參數名與形參變量名相同,定義同名的形參即可接收參數。

@RestController
public class RequestController {// http://localhost:8080/simpleParam?name=Tom&age=10// 第1個請求參數: name=Tom   參數名:name,參數值:Tom// 第2個請求參數: age=10     參數名:age , 參數值:10//springboot方式@RequestMapping("/simpleParam")public String simpleParam(String name , Integer age ){//形參名和請求參數名保持一致System.out.println(name+"  :  "+age);return "OK";}
}

在這里插入圖片描述

在這里插入圖片描述
對于簡單參數來講,請求參數名和controller方法中的形參名不一致時,無法接收到請求數據。可以使用Spring提供的@RequestParam注解完成映射。

@RestController
public class RequestController {// http://localhost:8080/simpleParam?name=Tom&age=20// 請求參數名:name//springboot方式@RequestMapping("/simpleParam")public String simpleParam(@RequestParam("name") String username , Integer age ){System.out.println(username+"  :  "+age);return "OK";}
}

如果該參數是可選的,可以將required屬性設置為false。(默認為 true)

@RequestMapping("/simpleParam")
public String simpleParam(@RequestParam(name = "name", required = false) String username, Integer age){System.out.println(username+ ":" + age);return "OK";
}

3. 實體參數

如果請求參數比較多,通過上述的方式一個參數一個參數的接收,會比較繁瑣。 我們可以考慮將請求參數封裝到一個實體類對象中。注意:請求參數名與實體類的屬性名相同。

3.1 簡單實體對象

定義POJO實體類:

public class User {private String name;private Integer age;public String getName() {return name;}public void setName(String name) {this.name = name;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}@Overridepublic String toString() {return "User{" +"name='" + name + '\'' +", age=" + age +'}';}
}

Controller方法:

@RestController
public class RequestController {//實體參數:簡單實體對象@RequestMapping("/simplePojo")public String simplePojo(User user){System.out.println(user);return "OK";}
}

3.2 復雜實體對象

復雜實體對象指的是,在實體類中有一個或多個屬性,也是實體對象類型的。
在這里插入圖片描述
定義POJO實體類:

  • Address實體類
public class Address {private String province;private String city;public String getProvince() {return province;}public void setProvince(String province) {this.province = province;}public String getCity() {return city;}public void setCity(String city) {this.city = city;}@Overridepublic String toString() {return "Address{" +"province='" + province + '\'' +", city='" + city + '\'' +'}';}
}
  • User實體類
public class User {private String name;private Integer age;private Address address; //地址對象public String getName() {return name;}public void setName(String name) {this.name = name;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}public Address getAddress() {return address;}public void setAddress(Address address) {this.address = address;}@Overridepublic String toString() {return "User{" +"name='" + name + '\'' +", age=" + age +", address=" + address +'}';}
}

Controller方法:

@RestController
public class RequestController {//實體參數:復雜實體對象@RequestMapping("/complexPojo")public String complexPojo(User user){System.out.println(user);return "OK";}
}

4. 數組集合參數

在這里插入圖片描述

4.1 數組

請求參數名與形參數組名稱相同且請求參數為多個,定義數組類型形參即可接收參數。

xxxxxxxxxx?hobby=game&hobby=java 等同于 xxxxxxxxxxxxx?hobby=game,java

在這里插入圖片描述
Controller方法:

@RestController
public class RequestController {//數組集合參數@RequestMapping("/arrayParam")public String arrayParam(String[] hobby){System.out.println(Arrays.toString(hobby));return "OK";}
}

4.2 集合

請求參數名與形參集合對象名相同且請求參數為多個,@RequestParam 綁定參數關系。

默認情況下,請求中參數名相同的多個值,是封裝到數組。如果要封裝到集合,要使用@RequestParam綁定參數關系。

Controller方法:

@RestController
public class RequestController {//數組集合參數@RequestMapping("/listParam")public String listParam(@RequestParam List<String> hobby){System.out.println(hobby);return "OK";}
}

5. 日期參數

在這里插入圖片描述

在這里插入圖片描述

  • @DateTimeFormat注解的pattern屬性中指定了哪種日期格式,前端的日期參數就必須按照指定的格式傳遞。
  • 后端controller方法中,需要使用Date類型或LocalDateTime類型,來封裝傳遞的參數。

Controller方法:

@RestController
public class RequestController {//日期時間參數@RequestMapping("/dateParam")public String dateParam(@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") LocalDateTime updateTime){System.out.println(updateTime);return "OK";}
}

6. JSON 參數

如果是比較復雜的參數,前后端通過會使用JSON格式的數據進行傳輸。 (JSON是開發中最常用的前后端數據交互方式)。

在這里插入圖片描述

  • 傳遞json格式的參數,在Controller中會使用實體類進行封裝。
  • 封裝規則:JSON數據鍵名與形參對象屬性名相同,定義POJO類型形參即可接收參數。需要使用 @RequestBody標識(將JSON數據映射到形參的實體類對象中)。

在這里插入圖片描述
實體類:Address

public class Address {private String province;private String city;//省略GET , SET 方法
}

實體類:User

public class User {private String name;private Integer age;private Address address;//省略GET , SET 方法
}    

Controller方法:

@RestController
public class RequestController {//JSON參數@RequestMapping("/jsonParam")public String jsonParam(@RequestBody User user){System.out.println(user);return "OK";}
}

7. 路徑參數

在這里插入圖片描述

在這里插入圖片描述
Controller方法:

@RestController
public class RequestController {//路徑參數@RequestMapping("/path/{id}")public String pathParam(@PathVariable Integer id){System.out.println(id);return "OK";}
}

傳遞多個參數:

Controller方法:

@RestController
public class RequestController {//路徑參數@RequestMapping("/path/{id}/{name}")public String pathParam2(@PathVariable Integer id, @PathVariable String name){System.out.println(id+ " : " +name);return "OK";}
}

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

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

相關文章

EasyExcel之文件導出最佳實踐

文件導出 官方文檔&#xff1a;寫Excel | Easy Excel (alibaba.com) 引言 當使用 EasyExcel 進行 Excel 文件導出時&#xff0c;我最近在工作中遇到了一個需求。因此&#xff0c;我決定寫這篇文章來分享我的經驗和解決方案。如果你對這個話題感興趣&#xff0c;那么我希望這篇…

c語言插入排序算法(詳解)

插入排序是一種簡單直觀的排序算法&#xff0c;其主要思想是將一個待排序的元素插入到已經排好序的部分的合適位置。 插入排序的原理如下&#xff1a; 將序列分為兩部分&#xff1a;已排序部分和未排序部分。初始時&#xff0c;已排序部分只包含第一個元素&#xff0c;未排序…

php 接入 百度編輯器

按照github上的操作下載百度編輯器的包后&#xff0c;根據文檔上的步驟操作&#xff08;可能會遇到報錯&#xff09;&#xff1a; 1、git clone 倉庫 2、npm install 安裝依賴&#xff08;如果沒有安裝 grunt , 請先在全局安裝 grunt&#xff09; 我的是報了下面的錯&#…

Leetcode 17 電話號碼的字母組合

理解題意&#xff1a; 給定一個僅包含數字 2-9 的字符串&#xff0c;返回所有它能表示的字母組合 本質上&#xff1a;數字代表著一個字母集合 數字的個數決定了遞歸的深度&#xff0c;即樹的深度 數字代表的字母組合決定了當前樹的寬度。 1.暴力回溯 這里沒有什么剪枝…

387.字符串中的第一個唯一字符 —> `size()`

解答&#xff1a; int firstUniqChar(string s) {int size s.size();// char count[26] { 0 };// error.1int count[26] { 0 };// for (int i 0; i < s.size() - 1; i) // error.2for (int i 0; i < size; i){count[s[i] - a] 1;}for (int i 0; i < size; i){…

Android 幸運轉盤實現邏輯

一、前言 幸運轉盤在很多app中都有&#xff0c;也有很多現實的例子&#xff0c;不過這個難度并不是如何讓轉盤轉起來&#xff0c;真正的難度是如何統一個方向轉動&#xff0c;且轉到指定的目標區域&#xff08;中獎概率從來不是隨機的&#xff09;&#xff0c;當然還不能太假&…

AI全棧大模型工程師(二十二)什么是模型訓練

文章目錄 ?? 這節課會帶給你還是寫在前面Fine-Tuning 有什么用:先看一個例子我有很多問題一、什么是:二、什么是模型2.1、通俗(不嚴謹)的說、模型是一個函數:2.2、一個最簡單的神經網絡三、什么是模型訓練3.1、模型訓練本質上是一個求解最優化問題的過程3.2、怎么求解3.…

人類的耳朵:聽覺的動態范圍

作者&#xff1a;聽覺健康 聽覺的動態范圍即可用的聽力范圍。在坐標系中&#xff0c;它可以表示為以聽閾和最大舒適級為界形成的區域&#xff0c;其坐標軸分別為頻率和聲壓級&#xff08;刺激持續時間在某種程度上對其產生影響&#xff09;。是什么因素決定了人類聽力的極限&am…

隨機森林回歸模型,SHAP庫可視化

隨機森林回歸模型 創建一個隨機森林回歸模型&#xff0c;訓練模型&#xff0c;然后使用SHAP庫解釋模型的預測結果&#xff0c;并將結果可視化。 具體步驟如下&#xff1a; 首先&#xff0c;代碼導入了所需的庫&#xff0c;包括matplotlib、shap、numpy和sklearn.ensemble。ma…

Compilation failureFailure executing javac, but could not parse the error

記一次maven編譯錯誤導致的打包失敗問題。錯誤如下 Compilation failure Failure executing javac, but could not parse the error: javac: Ч ? : ? ? : javac <options> <source files> -help г ? ? 排查路徑如下&#xff1a; 1&#xff…

[原創] FPGA的JTAG燒錄不穩定或燒錄失敗原因分析

一、電路故障背景 打板回來常會出現燒錄不良&#xff0c;調試是一個技術活&#xff0c;如果燒錄不過關&#xff0c;一切白搭。 二、常見JTAG故障原因如下&#xff1a; 1、ESD防護器件焊接不良&#xff1b; 電路板給生產部分焊接&#xff0c;發現元器件虛焊&#xff0c;特別是…

【MySQL】MySQL的varchar字段最大長度是65535?

在MySQL建表sql里,我們經常會有定義字符串類型的需求。 CREATE TABLE `user` ( `name` varchar(100) NOT NULL DEFAULT COMMENT 名字) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ; 比方說user表里的名字,就是個字符串。MySQL里有兩個類型比較適合這個場景。 char和varchar。…

我嘗試用 AI 來做數據分析,結果差強人意!

大家好&#xff0c;我是木川 工作中經常會需要分析數據 1、統計分析&#xff0c;計算某項指標的均值、分位數、標準差等 2、相關性分析&#xff0c;比如分析銷售額與顧客年齡、顧客性別、促銷活動等的相關性 3、可視化分析&#xff0c;比如繪制柱狀圖、折線圖、散點圖等 有了 A…

幾種排序的實現

直接插入排序 直接插入排序是一種簡單的插入排序法&#xff0c;其基本思想是&#xff1a; 把待排序的記錄按其關鍵碼值的大小逐個插入到一個已經排好序的有序序列中&#xff0c;直到所有的記錄插入完為止&#xff0c;得到一個新的有序序列 。 實際中我們玩撲克牌時&#xff…

交付《啤酒游戲經營決策沙盤》的項目

感謝首富客戶連續兩年的邀請&#xff0c;交付《啤酒游戲經營決策沙盤》的項目&#xff0c;下周一JSTO首席學習官Luna想讓我分享下系統思考與投資理財&#xff0c;想到曾經看過的一本書《深度思維》&#xff0c;看到一些結構來預判未來。不僅僅可以應用在企業經營和組織發展上&a…

Uncaught SyntaxError: Unexpected end of input (at manage.html:1:21) 的一個解

關于Uncaught SyntaxError: Unexpected end of input (at manage.html:1:21)的一個解 問題復現 <button onclick"deleteItem(${order.id},hire,"Orders")" >delete</button>報錯 原因 函數參數的雙引號和外面的雙引號混淆了&#xff0c;改成…

【vuex】

vuex 1 理解vuex1.1 vuex是什么1.2 什么時候使用vuex1.3 vuex工作原理圖1.4 搭建vuex環境1.5 求和案例1.5.1 vue方式1.5.2 vuex方式 2 vuex核心概念和API2.1 getters配置項2.2 四個map方法的使用2.2.1 mapState方法2.2.2 mapGetters方法2.2.3 mapActions方法2.2.4 mapMutations…

買賣股票的最佳時機算法(leetcode第121題)

題目描述&#xff1a; 給定一個數組 prices &#xff0c;它的第 i 個元素 prices[i] 表示一支給定股票第 i 天的價格。你只能選擇 某一天 買入這只股票&#xff0c;并選擇在 未來的某一個不同的日子 賣出該股票。設計一個算法來計算你所能獲取的最大利潤。返回你可以從這筆交易…

“HALCON error #2454:HALCON handle was already cleared in operator set_draw“

分析&#xff1a;錯誤提示是窗口句柄已經被刪除&#xff0c;這是因為前邊的一句 HOperatorSet.CloseWindow(hWindowControl1.HalconWindow); 關掉了窗口&#xff0c;屏蔽或刪除即可。

UDS診斷 10服務的肯定響應碼后面跟著一串數據的含義,以及診斷報文格式定義介紹

一、首先看一下10服務的請求報文和肯定響應報文格式 a.診斷儀發送的請求報文格式 b.ECU回復的肯定響應報文格式 c.肯定響應報文中參數定義 二、例程數據解析 a.例程數據 0.000000 1 725 Tx d 8 02 10 03 00 00 00 00 00 0.000806 1 7A5 Rx d 8 06 50 03 00 32 01 F4 CC …