詳解SpringBoot接收參數(shù)的五種形式
SpringBoot接收參數(shù)的幾種形式
在SpringBoot中獲取參數(shù)基本方式有5種,需要都掌握.
這里需要記住一個(gè)技術(shù)術(shù)語(yǔ)或概念
API接口: 你寫好的那個(gè)URL地址,就被稱為API接口
1. 接收常規(guī)參數(shù)
給/param/demo1這個(gè)URL接口發(fā)送id, name兩個(gè)參數(shù)

以上是以GET請(qǐng)求類型進(jìn)行發(fā)送,實(shí)際發(fā)送的請(qǐng)求如下:

在SpringBoot端,我們可以直接在處理請(qǐng)求的那個(gè)方法形參上,寫上和請(qǐng)求參數(shù)同名的形參名稱即可
獲取到的id和name參數(shù):
@RequestMapping("/param/demo1")
public void demo1(int id, String name){
System.out.println("獲取到的參數(shù)是:");
System.out.println("id:" + id);
System.out.println("name:" + name);
}
如果發(fā)送的是POST類型的請(qǐng)求,需要注意:POST請(qǐng)求的參數(shù)是放在請(qǐng)求體中提交給服務(wù)器端的.
我們接收的時(shí)候,也可以使用普通方法直接接收:
// 接收POST方式提交過(guò)來(lái)的數(shù)據(jù)
@RequestMapping("/param/demo2")
public void demo2(String gender, String name){
System.out.println("獲取到的數(shù)據(jù)是:");
System.out.println("name = " + name);
System.out.println("gender = " + gender);
}
注意點(diǎn),接收參數(shù)的時(shí)候,不一定非要和提交過(guò)來(lái)的參數(shù)順序一致,只需要名稱對(duì)應(yīng)上即可.
如果提交的參數(shù)名稱和接收的名稱不一致,可以使用@RequestParam注解進(jìn)行參數(shù)映射

// 接收POST方式提交過(guò)來(lái)的數(shù)據(jù)
@RequestMapping("/param/demo2")
public void demo2(@RequestParam("xingbie") String gender, String name){
System.out.println("獲取到的數(shù)據(jù)是:");
System.out.println("name = " + name);
System.out.println("gender = " + gender);
}
2. 使用POJO接收參數(shù)
如果需要同時(shí)接收一批數(shù)據(jù),而不想通過(guò)普通方式一個(gè)個(gè)接收,就可以使用POJO對(duì)象的方式來(lái)獲取提交過(guò)來(lái)的所有數(shù)據(jù)
只需要POJO對(duì)象的屬性名和提交過(guò)來(lái)的參數(shù)一一對(duì)應(yīng)上就可以了
比如如果想接收name, age, school, gender這些參數(shù)

寫一個(gè)POJO,屬性和提交過(guò)來(lái)的參數(shù)可以對(duì)應(yīng)的上, 注意,一定要有g(shù)etter/setter方法
@Data
public class People {
private String name;
private int age;
private String school;
private String gender;
}
//如果同時(shí)提交過(guò)來(lái)一批數(shù)據(jù)(比如說(shuō)10來(lái)個(gè)數(shù)據(jù),我們要在形參中寫上一堆參數(shù)嗎?)
//如果同時(shí)提交過(guò)來(lái)的參數(shù)過(guò)多,我們可以考慮使用POJO方式接收
// Plain Old Java Object
@RequestMapping("/param/demo3")
public void demo3(People people){
System.out.println("接收到的數(shù)據(jù)是:");
System.out.println(people);
}
如果前端提交過(guò)來(lái)的數(shù)據(jù)是一個(gè)嵌套的數(shù)據(jù),如何接收?
此時(shí)就需要使用嵌套的POJO來(lái)接收:

@Data
public class Address {
private String sheng;
private String shi;
private String xian;
}
@Data
public class Teacher {
private String name;
private int age;
private Address address;
}
//接收嵌套的參數(shù)
@RequestMapping("/param/demo4")
public void demo4(Teacher teacher){
System.out.println("接收到的數(shù)據(jù)是:");
System.out.println(teacher);
// 要獲取所在的市
String shi = teacher.getAddress().getShi();
System.out.println("所在市:" + shi);
}
3. 接收數(shù)組或列表類型的數(shù)據(jù)
使用數(shù)組接收數(shù)據(jù)

// 接收數(shù)組數(shù)據(jù)
@RequestMapping("/param/demo5")
public void demo5(String[] likes){
System.out.println("接收到的數(shù)據(jù)是:");
System.out.println(Arrays.toString(likes));
}
使用集合接收數(shù)據(jù),此時(shí)需要使用@RequestParam注解

@RequestMapping("/param/demo7")
public void demo7(@RequestParam List<String> likes){
System.out.println("接收到的數(shù)據(jù)是:");
System.out.println(likes);
}
4. 接收J(rèn)SON類型的數(shù)據(jù)
JSON是什么
JSON是一種輕量級(jí)的數(shù)據(jù)交換格式,易于人閱讀和編寫,可以在多種語(yǔ)言之間進(jìn)行數(shù)據(jù)交換
JSON數(shù)據(jù)的常用結(jié)構(gòu)
JSON對(duì)象
{
"name": "劉旭超",
"age": 36,
"likes": ["打游戲", "看電影"]
}
JSON數(shù)組
[100, 200, 300] ["aaa", "bbb", "ccc"]
JSON對(duì)象數(shù)組
[
{
"name": "劉旭超",
"age": 36
},
{
"name": "劉二超",
"age": 36
},
{
"name": "劉小超",
"age": 36
}
]
SpringBoot端接收J(rèn)SON類型的數(shù)據(jù)
注意: 要接收J(rèn)SON類型的數(shù)據(jù),在SpringBoot的方法參數(shù)中一定要使用@RequestBody注解才可以
接收J(rèn)SON對(duì)象

SpringBoot端需要先定義一個(gè)POJO:
比如定義一個(gè)People類,People類的屬性一一的和JSON的數(shù)據(jù)對(duì)應(yīng)上:
@Data
public class People {
private String name;
private int age;
private String[] likes;
}
@RequestMapping("/param/demo8")
public void demo8(@RequestBody People people) {
System.out.println(people);
}
接收J(rèn)SON數(shù)組
假如有以下JSON數(shù)組:

SpringBoot端使用@RequestBody注解,參數(shù)類型使用的數(shù)組或列表集合直接接收即可:
// 使用數(shù)組接收
@RequestMapping("/param/demo9")
public void demo8(@RequestBody Integer[] numbers) {
System.out.println(Arrays.toString(numbers));
}
// 使用列表集合接收
@RequestMapping("/param/demo9")
public void demo8(@RequestBody List<Integer> numbers) {
System.out.println(numbers);
}
接收對(duì)象數(shù)組
假如有以下JSON數(shù)組:

JSON對(duì)象,即使使用{}包裹的,我們需要使用JAVA對(duì)象來(lái)做對(duì)應(yīng), 使用[]包裹的,我們需要使用數(shù)組或列表集合來(lái)對(duì)應(yīng)
定義一個(gè)對(duì)象來(lái)接收J(rèn)SON{}里的數(shù)據(jù)
@Data
public class People {
private String name;
private int age;
}
@RequestMapping("/param/demo9")
public void demo8(@RequestBody List<People> peopleList) {
System.out.println(peopleList);
}
5. 接收日期類型的參數(shù)

日期格式的數(shù)據(jù),提交給SpringBoot的時(shí)候,我們是直接可以使用普通方式接受沒(méi)有任何問(wèn)題.
但是如果如上所示,我們使用字符串接收:
@RequestMapping("/param/demo10")
public void demo10(String startDate,String endDate){
// 此時(shí)接收到參數(shù)以后,startDate和endDate就是一個(gè)單純的字符串,假如我們想使用年、月、日的
//據(jù)的時(shí)候
// 我們得使用字符串的一些方法來(lái)分割或截取才能獲取到對(duì)應(yīng)的年、月、日數(shù)據(jù)
String[] dateArray =
startDate.split("/");
String year = dateArray[0];
int yearInt = Interger.parseInt(year);
// 以上操作是不方便的
}
為了方便操作,SpringBoot是可以直接把前端提交過(guò)來(lái)的日期格式的數(shù)據(jù),對(duì)應(yīng)到JAVA的日期類型上,需要使用@DateTimeFormat注解+ Date類型對(duì)象來(lái)接收:
@RequestMapping("/param/demo10")
public void demo10(@DateTimeFormat(pattern = "yyyy/MM/dd") Date startDate,
@DateTimeFormat(pattern = "yyyy-MM-dd") Date endDate){
System.out.println(startDate.getMonth());
System.out.println(endDate);
}
的數(shù)據(jù),對(duì)應(yīng)到JAVA的日期類型上,需要使用@DateTimeFormat注解+ Date類型對(duì)象來(lái)接收:
@RequestMapping("/param/demo10")
public void demo10(@DateTimeFormat(pattern = "yyyy/MM/dd") Date startDate,
@DateTimeFormat(pattern = "yyyy-MM-dd") Date endDate){
System.out.println(startDate.getMonth());
System.out.println(endDate);
}
以上就是SpringBoot接收參數(shù)的五種形式的詳細(xì)內(nèi)容,更多關(guān)于SpringBoot接收參數(shù)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Java線程池ThreadPoolExecutor源碼深入分析
ThreadPoolExecutor作為java.util.concurrent包對(duì)外提供基礎(chǔ)實(shí)現(xiàn),以內(nèi)部線程池的形式對(duì)外提供管理任務(wù)執(zhí)行,線程調(diào)度,線程池管理等等服務(wù)2022-08-08
Java內(nèi)存結(jié)構(gòu)和數(shù)據(jù)類型
本文重點(diǎn)給大家介紹java內(nèi)存結(jié)構(gòu)和數(shù)據(jù)類型知識(shí),非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友參考下2016-12-12
兩種Eclipse部署動(dòng)態(tài)web項(xiàng)目方法
這篇文章主要介紹了兩種Eclipse部署動(dòng)態(tài)web項(xiàng)目方法,需要的朋友可以參考下2015-11-11
淺談Java中ArrayList的擴(kuò)容機(jī)制
本文主要介紹了淺談Java中ArrayList的擴(kuò)容機(jī)制,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-06-06
Java如何加載外部Jar的類并通過(guò)反射調(diào)用類的方法
這篇文章主要介紹了Java如何加載外部Jar的類并通過(guò)反射調(diào)用類的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-06-06
Java利用MapStruct優(yōu)雅解決Bean映射難題的完全指南
在Java開(kāi)發(fā)中,Bean映射是高頻場(chǎng)景,本文從基礎(chǔ)用法到進(jìn)階擴(kuò)展,全面拆解MapStruct的使用流程,助力開(kāi)發(fā)者高效實(shí)現(xiàn)Bean映射,感興趣的小伙伴可以了解下2026-01-01

