SpringBoot請求參數傳遞與接收說明小結
一、GET請求和POST請求的區(qū)別是什么
GET和POST請求的區(qū)別主要有下面幾點
- GET沒有請求體,POST有請求體
- GET傳輸比POST快
- GET只能攜帶少量數據(因為其請求url有長度限制),POST可以攜帶的數據量較大
- POST因為將數據放在請求體中,GET將數據拼接到url中,所以POST比GET要安全
二、不同類型參數傳遞方法
GET請求沒有請求體,所以在發(fā)送GET請求時,都是進行請求URL的拼接。而POST請求攜帶有請求體,所以在請求時,不僅僅可以拼接URL,還可以在請求體中放入數據。
1、單個基本數據類型參數傳遞
單個基本類型數據傳遞時,后端往往只需要在接收方法中定義相應數據類型的數據,就可以直接接收。
1)GET請求
無注解
@GetMapping(path = "/em") public Result demo1(String person) { System.out.println(person); return Result.success("OK!"); }
@RequestParam
獲取查詢參數。即url?name=這種形式
@GetMapping("/de/{name}") public Result demo1( @RequestParam(name = "name") String name) { System.out.println("name="+name); return Result.success("OK!"); }
@PathVariable
獲取路徑參數。即url/{id}這種形式。
@GetMapping("/ded/{id}") public Result demo(@PathVariable(name = "id") String id) { System.out.println("id="+id); return Result.success("OK!"); }
2)POST請求
@PostMapping(path = "/emo") public Result demo2(String person) { System.out.println(person); return Result.success("OK!"); }
2、多個參數傳遞
1)多個變量接收
(1)get
@GetMapping("/de") public Result demo11(String id, String name) { System.out.println("id="+id); System.out.println("name="+name); return Result.success("OK!"); }
(2)post
@PostMapping("/de") public Result demo11(String id, String name) { System.out.println("id="+id); System.out.println("name="+name); return Result.success("OK!"); }
當使用這種方法接收的時候,需要保證前端傳遞的參數名與后端方法中定義的變量名保持完全一致,或者使用@RequestParam(“前端傳遞的參數名”)注解指定變量的對應關系。
通過以上兩種情況,我們可以得出結論,在以字符串拼接方式發(fā)送請求時,GET和POST請求的接收方式是完全一樣的。所以下面我們只針對于GET的方式與POST以請求體的方式傳遞時的接收方法進行介紹。
@GetMapping("/de/{idd}") public void demo11(@PathVariable(name = "idd") String idd, @RequestParam(name = "name") String name) { System.out.println("id="+idd); System.out.println("name="+name); }
2)實體類接收
如果后臺有一個實體類,滿足:
- 傳遞的參數集合為實體類屬性的子集(實體類包含了前端傳遞的所有參數,可以比前端傳遞的參數多,不可少);
- 實體類中參數必須有getter/setter方法。
那就可以在后端用該實體類進行接收。
get請求只需要在后端方法中添加該實體類進行接收即可。
@GetMapping("/demo1") public Result demo(LoginDto loginDto) { System.out.println(loginDto.toString()); return Result.success("OK!"); }
post請求是將數據放入請求體中,將數據封裝成一個json對象進行傳遞,此時如果單純的使用Student對象接收是不可以的
.@RequestBody,加上這個注解后,Springmvc會從請求體中獲取數據并進行相應的轉換,否則為null
@PostMapping("/demo2") public Result demo(@RequestBody LoginDto loginDto) { System.out.println(loginDto.toString()); return Result.success("OK!"); }
3)Map接收
當我們沒有對應的實體類可以用來接收前端傳遞過來的多個數據時,Map類無疑成為了最方便的一個類。其數據結構與JSON的極為相似也注定了Map作為SpringBoot數據傳遞中不可或缺的地位。
GET請求
當我們使用實體類LoginDto時,里面的成員變量已經確定為username和password,springmvc只需要根據名稱調用setter方法進行數據填充即可,但是作為一個Map,它里面的參數名和數據沒有任何定義,所以springmvc不會將數據進行填充,導致了接收的Map為0的結果。
解決方法當然是有的,我們需要借助另外一個注解:@RequestParam,注意這個注解使用時,不需要指定name等屬性,直接使用該注解即可,加上之后,就可以接收了。
@GetMapping("/demo1") public Result demo(@RequestParam Map loginDto) { System.out.println(loginDto.toString()); return Result.success("OK!"); }
POST請求
@PostMapping("/demo2") public Result demo1(@RequestBody Map<String, String> loginDto) { System.out.println(loginDto.toString()); return Result.success("OK!"); }
3、數組
(1)GET請求
@GetMapping("/demo1") public Result demo(@RequestParam List<String> name) { System.out.println(name); return Result.success("OK!"); }
這個方法確實可以實現數組的接收。這里需要注意的是:
- @RequestParam注解是必須的,且方法中的變量名要與URL中的參數名相同,不同的話也可以通過@RequestParam里面的name進行設置
- 這里使用的是List對象接收,其實使用String[]也是可以接收的
(2)POST請求
@PostMapping("/demo2") public Result demo1(@RequestBody List<String> name) { System.out.println(name); return Result.success("OK!"); }
4、請求頭參數以及Cookie
@GetMapping("/demo3") public void demo3(@RequestHeader(name = "myHeader") String myHeader, @CookieValue(name = "myCookie") String myCookie) { System.out.println("myHeader=" + myHeader); System.out.println("myCookie=" + myCookie); } 或 @GetMapping("/demo3") public void demo3(HttpServletRequest request) { System.out.println(request.getHeader("myHeader")); for (Cookie cookie : request.getCookies()) { if ("myCookie".equals(cookie.getName())) { System.out.println(cookie.getValue()); } } }
到此這篇關于SpringBoot請求參數傳遞與接收說明小結的文章就介紹到這了,更多相關SpringBoot請求參數傳遞與接收內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
解決新版 Idea 中 SpringBoot 熱部署不生效的問題
這篇文章主要介紹了解決新版 Idea 中 SpringBoot 熱部署不生效的問題,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-08-08Spring Boot實現STOMP協議的WebSocket的方法步驟
這篇文章主要介紹了Spring Boot實現STOMP協議的WebSocket的方法步驟,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2019-05-05