您好,登錄后才能下訂單哦!
這篇文章主要講解了springboot如何實現(xiàn)獲取前端傳遞的參數(shù),內(nèi)容清晰明了,對此有興趣的小伙伴可以學(xué)習(xí)一下,相信大家閱讀完之后會有幫助。
url里的參數(shù)
通過url里傳過來的參數(shù)一般有三種方式,下面我們來看一下
路徑參數(shù)
路徑參數(shù)就是說在請求路徑里攜帶了幾個參數(shù),比如有一個查詢banner詳情的接口,/v2/banner/123,這里的123就是參數(shù),可以表示banner的ID。
下面我們設(shè)計了一個簡陋的接口,來演示路徑參數(shù)的獲取
@RestController @RequestMapping(value = "/v2/banner") public class BannerController { @GetMapping("/{id}") public Integer getBannerDetail(@PathVariable Integer id){ return id; } }
獲取banner詳情完整接口路徑是/v2/banner/{id},這里的id就是路徑參數(shù),在方法的傳參里,用@PathVariable注解標(biāo)明那個參數(shù)用來接收請求路徑傳遞過來的值,通過postman發(fā)個請求看看
這里要注意,接口路由里定義的參數(shù)名要和方法參數(shù)里的定義名字要一樣,如果不一樣需要通過@PathVariable來指定**
@GetMapping("/{id}") public Integer getBannerDetail(@PathVariable(name = "id") Integer id12){ return id12; }
查詢參數(shù)
查詢參數(shù)就是請求的url里?號后面跟的鍵值對,比如/v2/banner?id=123,下面我們重新定義一個借口,采用查詢參數(shù)的形式獲取banner詳情
請求url里的查詢參數(shù)通過@RequestParam注解可以和方法里的參數(shù)進(jìn)行一一對應(yīng),比如現(xiàn)在有這么個url:/v2/banner?id=123&pos=3
,那么接口的參數(shù)定義就得是@RequestParam Integer id, @RequestParam Integer pos
,請求上面定義的接口看看返回值
路徑參數(shù)和查詢參數(shù)結(jié)合
路徑參數(shù)和查詢時可以同時使用的,那在定義接口的時候,同時使用這兩種注解就行,比如下面的接口
@GetMapping("/{id}") public Map<String, Object> getBannerDetail(@PathVariable Integer id, @RequestParam Integer pos){ Map<String, Object> body = new HashMap<>(); body.put("id", id); body.put("pos", pos); return body; }
請求一下接口
請求body里的參數(shù)
先來思考一個問題,當(dāng)前端傳遞過來一個json的數(shù)據(jù),我們的方法通過什么樣的形式能夠接受到參數(shù)呢?
一般來說有兩種形式,Map和自定義對象,下面我們分別來介紹一下。
Map
設(shè)計簡單的banner創(chuàng)建接口,參數(shù)通過Map來接收,創(chuàng)建成功后,添加一個id,然后將傳遞的數(shù)據(jù)和id一起返回
@PostMapping(value = "/create") public Map<String, Object> createBanner(@RequestBody Map<String, Object> banner){ banner.put("id", 1243); return banner; }
這里@RequestBody的這個注解來將body里的參數(shù),轉(zhuǎn)化成一個map,請求一下接口看看正常不:
上面我們使用的Map,它是一個接口,在具體接收數(shù)據(jù)的時候,肯定會用一個Map的實現(xiàn)類,這就會設(shè)計到裝箱拆箱的過程,那么頻繁的裝箱拆箱會有一定到的性能損耗,所以這種方式一般并不推薦使用。
自定義對象Dto
我們將接收請求參數(shù)的對象稱作為數(shù)據(jù)傳輸對象,一般定義為XXXDto,這里我們定義一個創(chuàng)建banner時用來接收參數(shù)的對象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 Map<String, Object> createBanner(@RequestBody BannerCreateDto dto){ Map<String, Object> res = new HashMap<>(); res.put("id", 10000); res.put("name", dto.getName()); res.put("pos", dto.getPos()); return res; }
用@RequestBody標(biāo)記BannerCreateDto對象,spring-boot會自動調(diào)用對象的getter和setter給他賦值。我們請求一下看看:
看完上述內(nèi)容,是不是對springboot如何實現(xiàn)獲取前端傳遞的參數(shù)有進(jìn)一步的了解,如果還想學(xué)習(xí)更多內(nèi)容,歡迎關(guān)注億速云行業(yè)資訊頻道。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。