Springboot傳參詳解
測(cè)試工具 IDEA、postman
一、@RequestParam
針對(duì)QueryString參數(shù)傳遞,在請(qǐng)求URL中直接拼接請(qǐng)求參數(shù),如URL?param1=value1& param2=value2
1.傳遞基本類(lèi)型參數(shù)
在接收的方法中用@RequestParam注解修飾,指定前端傳遞的參數(shù)名稱(chēng)
@RequestMapping("QueryStringTest1") public String QueryStringTest1(@RequestParam("id") String id,@RequestParam("name") String name){ return "id is "+ id+",name is "+ name; }
Postman 中調(diào)用
如果傳遞的參數(shù)和接收的參數(shù)名一致,甚至可以省略相關(guān)配置
省略1
@RequestParam(“id”) 中的參數(shù)名id被省略
@RequestMapping("QueryStringTest2") public String QueryStringTest2(@RequestParam String id,@RequestParam String name){ return "id is "+ id+",name is "+ name; }
注意:因?yàn)橛蠷equestParam注解的存在,所以傳參必須包含所有使用RequestParam注解的接收參數(shù),否則會(huì)報(bào)錯(cuò)(允許傳空,但是必須包含參數(shù));
可以使用@RequestParam(value = “id”,required = false) 的方式,讓id未傳也可以。
省略2
@RequestParam 注解直接被省略
@RequestMapping("QueryStringTest3") public String QueryStringTest3(String id, String name){ return "id is "+ id+",name is "+ name; }
允許其中的參數(shù)不傳,不會(huì)報(bào)錯(cuò),但取值為null,比如name不傳
傳參和入?yún)⒚灰粯拥那闆r
@RequestMapping("QueryStringTest4") public String QueryStringTest4(@RequestParam("id") String myId,@RequestParam("name") String myName){ return "myId is "+ myId+",myName is "+ myName; }
2.傳遞對(duì)象類(lèi)型參數(shù)
定義一個(gè)對(duì)象,屬性名稱(chēng)和前端傳遞的參數(shù)名稱(chēng)一致即可
@RequestMapping("objectTest1") public String objectTest1(User user){ return "user.id is "+ user.getId()+",user.name is "+ user.getName(); }
未傳的屬性值為null
加上注解@RequestParam,會(huì)怎么樣呢? 會(huì)報(bào)錯(cuò),不要這樣用
@RequestMapping("objectTest3") public String objectTest3(@RequestParam User user){ return "user.id is "+ user.getId()+",user.name is "+ user.getName(); }
3.傳遞數(shù)組、集合類(lèi)型 數(shù)組
拼接多個(gè)參數(shù)名稱(chēng)一樣的參數(shù)即可,如URL?param=value1¶m=value2¶m=value3
@RequestMapping("arrayTest1") public String[] arrayTest1(@RequestParam String[] name){ for (String temp:name){ System.out.println(temp); } return name; }
對(duì)同一個(gè)參數(shù)賦多個(gè)值,多個(gè)值之間用,隔開(kāi),如URL?param=value1,value2,value3
集合
只舉例List,其他類(lèi)似
@RequestMapping("listTest1") public List listTest1(@RequestParam List name){ for(int i=0;i<name.size();i++){ System.out.println("list name==="+name.get(i)); } return name; }
二、@PathVariable
路徑傳參方式是將參數(shù)直接包含在URL路徑中,比如URL/paramValue1/paramValue2
在接口對(duì)應(yīng)的請(qǐng)求路徑中用{參數(shù)名}形式標(biāo)出路徑參數(shù)
在接口方法的參數(shù)上標(biāo)注@PathVariable指名對(duì)應(yīng)路徑參數(shù)的參數(shù)名
1.傳遞基本類(lèi)型參數(shù)
@RequestMapping("pathTest1/{id}/{name}") public String pathTest1(@PathVariable("id") String id, @PathVariable("name") String name){ return "id is "+ id+",name is "+ name; }
能省略這個(gè)注解嗎?我的結(jié)論是不可以,請(qǐng)看下面
@RequestMapping("pathTest2/{id}/{name}") public String pathTest2(String id,String name){ return "id is "+ id+",name is "+ name; }
2.傳遞數(shù)組、集合類(lèi)型 數(shù)組
@RequestMapping("pathArrayTest1/{name}") public String[] pathArrayTest1(@PathVariable("name") String[] names){ for (String name:names){ System.out.println("array name:"+name); } return names; }
集合
@RequestMapping("pathListTest1/{name}") public List pathListTest1(@PathVariable("name") List names) { for (int i=0;i<names.size();i++) { System.out.println("list name:" + names.get(i)); } return names; }
文件
// MultipartFile接收 @PostMapping("upload") public String uploadFile(@RequestParam("file") MultipartFile myFile){ return "type:"+myFile.getContentType() +" fileName:"+myFile.getOriginalFilename() +" size:"+myFile.getSize(); }
測(cè)試的注意點(diǎn)
- 用post
- 用Body的form-data
- 參數(shù)類(lèi)型選擇File 而不是默認(rèn)的Text
三、@RequestBody
針對(duì)body表單傳參,RequestBody只能有一個(gè)
1.傳遞基本類(lèi)型參數(shù)
@RequestMapping("bodyTest1") public String bodyTest1(@RequestBody String name){ return "name is:"+name; }
2. 傳遞對(duì)象類(lèi)型參數(shù)
比如User 對(duì)象
@RequestMapping("bodyTest2") public String bodyTest2(@RequestBody User user){ return "name is:"+user.getName() + " age is:"+user.getAge(); }
3. 傳遞數(shù)組、集合類(lèi)型
數(shù)組
@RequestMapping("bodyTest3") public String bodyTest3(@RequestBody String[] users){ return Arrays.asList(users).toString(); }
集合
User對(duì)象
@RequestMapping("bodyTest4") public String bodyTest4(@RequestBody List<User> users){ return users.toString(); }
String類(lèi)型
@RequestMapping("bodyTest5") public String bodyTest5(@RequestBody List<String> users){ return users.toString(); }
*Json對(duì)象
添加依賴(lài)
<dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.56</version> </dependency>
后端代碼
@RequestMapping("bodyTest6") public String bodyTest6(@RequestBody JSONObject user){ return "name is :"+user.get("name")+ " age is :"+user.get("age"); }
四、HttpServletRequest
明哥以前經(jīng)常用
@RequestMapping("httpRequest") public String httpRequest(HttpServletRequest request){ return "name is :"+request.getParameter("name")+ " age is :"+request.getParameter("age"); }
或者
五、@PathVariable+@RequestParam混合
@RequestMapping("pathAndParam/{id}") public String pathAndParam(@PathVariable("id") String id, @RequestParam("name") String name){ return "id is "+ id+",name is "+ name; }
六、@PathVariable+@RequestBody混合
@RequestMapping("pathAndBody/{id}") public String pathAndBody(@PathVariable("id") String id, @RequestBody User user){ return "id is "+ id+",name is "+ user.getName(); }
七、無(wú)注解傳參
@RequestMapping("other") public String other(User user){ return "name is:"+user.getName() + " age is:"+user.getAge(); }
小結(jié)
這節(jié)總結(jié)了“ Springboot傳參詳解 ”,希望能對(duì)大家有所幫助
到此這篇關(guān)于Springboot傳參詳解的文章就介紹到這了,更多相關(guān)Springboot傳參內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java中switch-case結(jié)構(gòu)的使用方法舉例詳解
這篇文章主要介紹了Java中switch-case結(jié)構(gòu)使用的相關(guān)資料,switch-case結(jié)構(gòu)是Java中處理多個(gè)分支條件的一種有效方式,它根據(jù)一個(gè)表達(dá)式的值來(lái)執(zhí)行不同的代碼塊,需要的朋友可以參考下2025-01-01使用Maven進(jìn)行依賴(lài)排除的詳細(xì)步驟
在Maven中,依賴(lài)排除是一種常見(jiàn)的技術(shù),用于從項(xiàng)目的依賴(lài)中排除特定的傳遞性依賴(lài),這通常用于解決依賴(lài)沖突或避免引入不需要的庫(kù),以下是如何在Maven中使用依賴(lài)排除的詳細(xì)步驟,包括代碼示例,需要的朋友可以參考下2024-11-11Java中IO流的BufferedOutputStream和FileOutputStream對(duì)比
這篇文章主要介紹了Java中IO流的BufferedOutputStream和FileOutputStream對(duì)比,不帶緩沖的操作,每讀一個(gè)字節(jié)就要寫(xiě)入一個(gè)字節(jié),由于涉及磁盤(pán)的IO操作相比內(nèi)存的操作要慢很多,所以在讀寫(xiě)的字節(jié)比較少的情況下,效率比較低,需要的朋友可以參考下2023-07-07淺析Java單例設(shè)計(jì)模式(自寫(xiě)demo)
Java單例模式是看起來(lái)以及用起來(lái)簡(jiǎn)單的一種設(shè)計(jì)模式,但是就實(shí)現(xiàn)方式以及原理來(lái)說(shuō),也并不淺顯,下面這篇文章主要給大家詳細(xì)介紹了Java中單例模式,需要的朋友可以參考下2021-12-12Spring中SmartLifecycle和Lifecycle的作用和區(qū)別
這篇文章主要介紹了Spring中SmartLifecycle和Lifecycle的作用和區(qū)別,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì)對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-03-03