詳解SpringBoot中5種類(lèi)型參數(shù)傳遞和json數(shù)據(jù)傳參的操作
當(dāng)涉及到參數(shù)傳遞時(shí),Spring Boot遵循HTTP協(xié)議,并支持多種參數(shù)傳遞方式。這些參數(shù)傳遞方式可以根據(jù)請(qǐng)求的不同部分進(jìn)行分類(lèi)。
- 路徑參數(shù)(Path Parameters):
- 路徑參數(shù)是指在URL路徑中的一部分,用于標(biāo)識(shí)資源或指定操作。路徑參數(shù)通常以{}的形式出現(xiàn)在URL中,如/users/{id},其中id就是一個(gè)路徑參數(shù)。路徑參數(shù)可以在URL中動(dòng)態(tài)地改變,從而實(shí)現(xiàn)對(duì)不同資源的操作。使用路徑參數(shù)時(shí),Spring Boot使用@PathVariable注解將路徑參數(shù)綁定到方法參數(shù)上。
- 查詢(xún)參數(shù)(Query Parameters):
- 查詢(xún)參數(shù)通常作為URL的一部分,以?開(kāi)始,以key=value的形式出現(xiàn),多個(gè)參數(shù)之間使用&連接,如/users?id=1&name=John。查詢(xún)參數(shù)主要用于篩選或過(guò)濾資源。在Spring Boot中,可以使用@RequestParam注解將查詢(xún)參數(shù)綁定到方法參數(shù)上。請(qǐng)求體參數(shù)(Request Body Parameters):
- 請(qǐng)求體參數(shù)是通過(guò)HTTP請(qǐng)求體中發(fā)送的數(shù)據(jù),通常用于傳遞復(fù)雜結(jié)構(gòu)的數(shù)據(jù),如JSON、XML等。請(qǐng)求體參數(shù)可以包含多個(gè)字段,并且可以表示更為復(fù)雜的數(shù)據(jù)模型。在Spring Boot中,可以使用@RequestBody注解將請(qǐng)求體參數(shù)綁定到方法參數(shù)上。
- 表單參數(shù)(Form Parameters):
- 表單參數(shù)通常使用HTML表單提交的數(shù)據(jù),可以通過(guò)application/x-www-form-urlencoded或multipart/form-data格式傳輸。表單參數(shù)與查詢(xún)參數(shù)類(lèi)似,但是通常用于提交數(shù)據(jù)而不是進(jìn)行篩選。在Spring Boot中,可以使用@RequestParam注解將表單參數(shù)綁定到方法參數(shù)上。
- 請(qǐng)求頭參數(shù)(Request Header Parameters):
- 請(qǐng)求頭參數(shù)包含在HTTP請(qǐng)求的頭部信息中,可以用于傳遞附加的元數(shù)據(jù),如鑒權(quán)信息、用戶(hù)代理等。在Spring Boot中,可以使用@RequestHeader注解將請(qǐng)求頭參數(shù)綁定到方法參數(shù)上。
使用理論進(jìn)行講解時(shí),我們可以了解這些參數(shù)傳遞方式的原理和用途。根據(jù)HTTP協(xié)議的規(guī)范和Spring Boot的設(shè)計(jì),開(kāi)發(fā)人員可以選擇合適的參數(shù)傳遞方式來(lái)滿(mǎn)足業(yè)務(wù)需求。這些參數(shù)傳遞方式在RESTful API開(kāi)發(fā)中非常常見(jiàn),可以用于處理各種場(chǎng)景下的數(shù)據(jù)傳輸。
普通參數(shù)
我們?cè)赨serController類(lèi)中寫(xiě)入這一段代碼
@RequestMapping("/commonParamDifferentname") @ResponseBody public String commonParamDifferentName(@RequestParam("name") String userName,int age){ System.out.println("普通參數(shù)傳遞 userName ==> "+userName); System.out.println("普通參數(shù)傳遞 age ==> "+age); return "{'module':'common param different name'}"; }
接收成功
POJO參數(shù)
我們?cè)赨ser類(lèi)中寫(xiě)入這一段代碼
package com.example.domain; public class User { private String name; private int age; private Address address; @Override public String toString() { return "User{" + "name='" + name + '\'' + ", age=" + age + ", address=" + address + '}'; } public Address getAddress() { return address; } public void setAddress(Address address) { this.address = address; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } }
我們?cè)赨serController類(lèi)中寫(xiě)入這一段代碼
//POJO參數(shù):請(qǐng)求參數(shù)與形參對(duì)象中的屬性對(duì)應(yīng)即可完成參數(shù)傳遞 @RequestMapping("/pojoParam") @ResponseBody public String pojoParam(User user){ System.out.println("pojo參數(shù)傳遞 user ==> "+user); return "{'module':'pojo param'}"; }
運(yùn)行成功
嵌套pojo參數(shù)
適用于下面這種,可以反復(fù)寫(xiě)
我們?cè)贏ddress類(lèi)中寫(xiě)入這一段代碼
package com.example.domain; public class Address { private String province; private String city; @Override public String toString() { return "Address{" + "province='" + province + '\'' + ", city='" + 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; } }
在UserController里面寫(xiě)入這一段代碼
@RequestMapping("/pojoContainPojoParam") @ResponseBody public String pojoContainPojoParam(User user){ System.out.println("pojo嵌套pojo參數(shù)傳遞 user ==> "+user); return "{'module':'pojo contain pojo param'}"; }
繼續(xù)測(cè)試
運(yùn)行成功
數(shù)組參數(shù)
@RequestMapping("/arrayParam") @ResponseBody public String arrayParam(String[] likes){ System.out.println("數(shù)組參數(shù)傳遞 likes ==> "+ Arrays.toString(likes)); return "{'module':'array param'}"; }
運(yùn)行成功
集合參數(shù)
@RequestMapping("/listParam") @ResponseBody public String listParam(@RequestParam List<String> likes){ System.out.println("集合參數(shù)傳遞 likes ==> "+ likes); return "{'module':'list param'}"; }
運(yùn)行成功
json數(shù)據(jù)傳參
我們?cè)赟pringMvcConfig里面加入這一段代碼@EnableWebMvc
,開(kāi)啟json數(shù)據(jù)自動(dòng)轉(zhuǎn)換
json格式
我們找到上面 集合參數(shù) 的代碼,把@RequestParam修改為@RequestBody
@RequestMapping("/listParamForJson") @ResponseBody public String listParamForJson(@RequestBody List<String> likes){ System.out.println("list common(json)參數(shù)傳遞 list ==> "+likes); return "{'module':'list common for json param'}"; }
這里選擇json,在下面寫(xiě)入數(shù)據(jù)
發(fā)現(xiàn)可以運(yùn)行成功
嵌套json格式
@RequestMapping("/pojoParamForJson") @ResponseBody public String pojoParamForJson(@RequestBody User user){ System.out.println("pojo(json)參數(shù)傳遞 user ==> "+user); return "{'module':'pojo for json param'}"; }
運(yùn)行成功
集合格式
@RequestMapping("/listPojoParamForJson") @ResponseBody public String listPojoParamForJson(@RequestBody List<User> list){ System.out.println("list pojo(json)參數(shù)傳遞 list ==> "+list); return "{'module':'list pojo for json param'}"; }
如果報(bào)錯(cuò),重啟一下就好了
運(yùn)行成功
以上就是詳解SpringBoot中5種類(lèi)型參數(shù)傳遞和json數(shù)據(jù)傳參的操作的詳細(xì)內(nèi)容,更多關(guān)于SpringBoot類(lèi)型傳參和json傳參的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Java中日期與時(shí)間的處理及工具類(lèi)封裝詳解
在項(xiàng)目開(kāi)發(fā)中免不了有對(duì)日期時(shí)間的處理,但Java中關(guān)于日期時(shí)間的類(lèi)太多了,本文就來(lái)介紹一下各種類(lèi)的使用及我們項(xiàng)目中應(yīng)該怎么選擇吧2023-07-07一文詳解前端和后端的數(shù)據(jù)是如何連接的(基于Spring?Boot、Django或Node.js)
這篇文章主要介紹了前端和后端的數(shù)據(jù)是如何連接的相關(guān)資料,文中通過(guò)示例介紹的非常詳細(xì),舉例講解的是基于Spring?Boot、Django或Node.js,需要的朋友可以參考下2025-01-01Java?定時(shí)任務(wù)技術(shù)趨勢(shì)詳情
這篇文章主要介紹了Java?定時(shí)任務(wù)技術(shù)趨勢(shì)詳情,定時(shí)任務(wù)是每個(gè)業(yè)務(wù)常見(jiàn)的需求,比如每分鐘掃描超時(shí)支付的訂單,每小時(shí)清理一次數(shù)據(jù)庫(kù)歷史數(shù)據(jù),每天統(tǒng)計(jì)前一天的數(shù)據(jù)并生成報(bào)表等,下文更多相關(guān)資料,需要的小伙伴可以參考一下2022-05-05java多媒體文件編碼 處理工具類(lèi)代碼實(shí)例
這篇文章主要介紹了java多媒體文件編碼 處理工具類(lèi)使用解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-09-09Spring?Boot+RabbitMQ?通過(guò)fanout模式實(shí)現(xiàn)消息接收功能(支持消費(fèi)者多實(shí)例部署)
這篇文章主要介紹了Spring?Boot+RabbitMQ?通過(guò)fanout模式實(shí)現(xiàn)消息接收(支持消費(fèi)者多實(shí)例部署),本文通過(guò)案例場(chǎng)景分析給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-03-03java中CompletableFuture異步執(zhí)行方法
本文主要介紹了java中CompletableFuture異步執(zhí)行方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-06-06Java數(shù)據(jù)結(jié)構(gòu)之位圖的簡(jiǎn)單實(shí)現(xiàn)和使用
位圖,?是一種非常常見(jiàn)的結(jié)構(gòu),?它使用每個(gè)二進(jìn)制位來(lái)存放一個(gè)值的狀態(tài),?就類(lèi)似于?Java?當(dāng)中?HashSet?存儲(chǔ)元素的功能。本文主要來(lái)介紹一下位圖的簡(jiǎn)單實(shí)現(xiàn)和使用,需要的可以參考一下2023-05-05