歡迎您光臨本站 註冊首頁

springboot如何去獲取前端傳遞的參數的實現

←手機掃碼閱讀     qp18502452 @ 2020-06-04 , reply:0

本文主要討論spring-boot如何獲取前端傳過來的參數,這些參數主要有兩大類,一類是URL裡的參數,一個是請求body裡的參數

url裡的參數  

通過url裡傳過來的參數一般有三種方式,下面我們來看一下

路徑參數

路徑參數就是說在請求路徑裡攜帶了幾個參數,比如有一個查詢banner詳情的接口,/v2/banner/123,這裡的123就是參數,可以表示banner的ID。

下面我們設計了一個簡陋的接口,來演示路徑參數的獲取

 @RestController @RequestMapping(value = "/v2/banner") public class BannerController { @GetMapping("/{id}") public Integer getBannerDetail(@PathVariable Integer id){ return id; } }


獲取banner詳情完整接口路徑是/v2/banner/{id},這裡的id就是路徑參數,在方法的傳參裡,用@PathVariable註解標明那個參數用來接收請求路徑傳遞過來的值,通過postman發個請求看看

這裡要注意,接口路由裡定義的參數名要和方法參數裡的定義名字要一樣,如果不一樣需要通過@PathVariable來指定**

 @GetMapping("/{id}") public Integer getBannerDetail(@PathVariable(name = "id") Integer id12){ return id12; }


查詢參數

查詢參數就是請求的url裡?號後面跟的鍵值對,比如/v2/banner?id=123,下面我們重新定義一個藉口,採用查詢參數的形式獲取banner詳情

請求url裡的查詢參數通過@RequestParam註解可以和方法裡的參數進行一一對應,比如現在有這麼個 url:/v2/banner?id=123&pos=3 ,那麼接口的參數定義就得是 @RequestParam Integer id, @RequestParam Integer pos ,請求上面定義的接口看看返回值

路徑參數和查詢參數結合

路徑參數和查詢時可以同時使用的,那在定義接口的時候,同時使用這兩種註解就行,比如下面的接口

 @GetMapping("/{id}") public MapgetBannerDetail(@PathVariable Integer id, @RequestParam Integer pos){ Mapbody = new HashMap<>(); body.put("id", id); body.put("pos", pos); return body; }


請求一下接口

請求body裡的參數  

先來思考一個問題,當前端傳遞過來一個json的數據,我們的方法通過什麼樣的形式能夠接受到參數呢?

一般來說有兩種形式,Map和自定義對象,下面我們分別來介紹一下。

Map

設計簡單的banner創建接口,參數通過Map來接收,創建成功後,添加一個id,然後將傳遞的數據和id一起返回

 @PostMapping(value = "/create") public MapcreateBanner(@RequestBody Mapbanner){ banner.put("id", 1243); return banner; }


這裡@RequestBody的這個註解來將body裡的參數,轉化成一個map,請求一下接口看看正常不:

上面我們使用的Map,它是一個接口,在具體接收數據的時候,肯定會用一個Map的實現類,這就會設計到裝箱拆箱的過程,那麼頻繁的裝箱拆箱會有一定到的性能損耗,所以這種方式一般並不推薦使用。

自定義對象Dto

我們將接收請求參數的對象稱作為數據傳輸對象,一般定義為XXXDto,這裡我們定義一個創建banner時用來接收參數的對象BannerCreateDto.

 public class BannerCreateDto { private String name; private Integer pos; public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getPos() { return pos; } public void setPos(Integer pos) { this.pos = pos; } }


在Controller具體使用:

 @PostMapping(value = "/create") public MapcreateBanner(@RequestBody BannerCreateDto dto){ Mapres = new HashMap<>(); res.put("id", 10000); res.put("name", dto.getName()); res.put("pos", dto.getPos()); return res; }


用@RequestBody標記BannerCreateDto對象,spring-boot會自動調用對象的getter和setter給他賦值。我們請求一下看看:

總結  

以上就是我們對spring-boot進行參數接收時處理方式的討論,包括路徑參數以及查詢參數,還有body參數的接收,下篇文章我們將討論一下參數的校驗,敬請關注!!


[qp18502452 ] springboot如何去獲取前端傳遞的參數的實現已經有288次圍觀

http://coctec.com/docs/java/show-post-236898.html