詳解SpringBoot中5種類型參數(shù)傳遞和json數(shù)據(jù)傳參的操作
當(dāng)涉及到參數(shù)傳遞時(shí),Spring Boot遵循HTTP協(xié)議,并支持多種參數(shù)傳遞方式。這些參數(shù)傳遞方式可以根據(jù)請(qǐng)求的不同部分進(jìn)行分類。
- 路徑參數(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ù)上。
- 查詢參數(shù)(Query Parameters):
- 查詢參數(shù)通常作為URL的一部分,以?開(kāi)始,以key=value的形式出現(xiàn),多個(gè)參數(shù)之間使用&連接,如/users?id=1&name=John。查詢參數(shù)主要用于篩選或過(guò)濾資源。在Spring Boot中,可以使用@RequestParam注解將查詢參數(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ù)與查詢參數(shù)類似,但是通常用于提交數(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)信息、用戶代理等。在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)滿足業(yè)務(wù)需求。這些參數(shù)傳遞方式在RESTful API開(kāi)發(fā)中非常常見(jiàn),可以用于處理各種場(chǎng)景下的數(shù)據(jù)傳輸。
普通參數(shù)
我們?cè)赨serController類中寫(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類中寫(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類中寫(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類中寫(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種類型參數(shù)傳遞和json數(shù)據(jù)傳參的操作的詳細(xì)內(nèi)容,更多關(guān)于SpringBoot類型傳參和json傳參的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Java Apollo是如何實(shí)現(xiàn)配置更新的
這篇文章主要介紹了Java Apollo是如何實(shí)現(xiàn)配置更新的,幫助大家更好的理解和學(xué)習(xí)使用Java,感興趣的朋友可以了解下2021-03-03
SpringBoot Shiro配置自定義密碼加密器代碼實(shí)例
這篇文章主要介紹了SpringBoot Shiro配置自定義密碼加密器代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-03-03
Java I/O深入學(xué)習(xí)之File和RandomAccessFile
這篇文章主要介紹了Java I/O深入學(xué)習(xí)之File和RandomAccessFile, I/O系統(tǒng)即輸入/輸出系統(tǒng),對(duì)于一門程序語(yǔ)言來(lái)說(shuō),創(chuàng)建一個(gè)好的輸入/輸出系統(tǒng)并非易事。在充分理解Java I/O系統(tǒng)以便正確地運(yùn)用之前,我們需要學(xué)習(xí)相當(dāng)數(shù)量的類。,需要的朋友可以參考下2019-06-06
一文詳解Java如何創(chuàng)建和銷毀對(duì)象
Java由Sun Microsystems發(fā)明并在1995年發(fā)布,是世界上使用最廣泛的編程語(yǔ)言之一。本文主要和大家介紹一下Java是如何創(chuàng)建和銷毀對(duì)象的,希望對(duì)大家有所幫助2022-11-11
java實(shí)現(xiàn)最短路徑算法之Dijkstra算法
這篇文章主要介紹了java實(shí)現(xiàn)最短路徑算法之Dijkstra算法, Dijkstra算法是最短路徑算法中為人熟知的一種,是單起點(diǎn)全路徑算法,有興趣的可以了解一下2017-10-10
基于Mybatis Plus實(shí)現(xiàn)多表分頁(yè)查詢的示例代碼
這篇文章主要介紹了基于Mybatis Plus實(shí)現(xiàn)多表分頁(yè)查詢的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-12-12
關(guān)于Maven依賴沖突解決之exclusions
這篇文章主要介紹了關(guān)于Maven依賴沖突解決之exclusions用法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-12-12
Mybatisplus自動(dòng)填充實(shí)現(xiàn)方式及代碼示例
這篇文章主要介紹了Mybatisplus自動(dòng)填充實(shí)現(xiàn)方式及代碼示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-11-11

