大二大三以來陸陸續續帶過很多小朋友做後端,往往最多的問題就是:前端和後端之間怎麼傳參數?後端和資料庫之間怎麼傳參數?這種層次之間傳遞參數的問題。
關于後端和資料庫之間的傳參,我們已經在STEP5中學會了使用JDBC的傳統方式,或者使用例如MyBatis等ORM架構來幫助我們進行實作。
孑辭:STEP5.1 初識MyBatiszhuanlan.zhihu.com

那麼前端和後端之間怎麼進行傳參呢?
在我們之前學習STEP4.4 寫一個簡易登入子產品中,其實已經接觸過了一個基本的接收參數的方法:
@GetMapping("/login/{username}/{password}")
public String login(@PathVariable(value = "username",required = true)String username,
@PathVariable(value = "password",required = true)String password){
如果對這一行代碼不熟悉,可以回到我們的STEP4.4簡單回憶一下。
這裡再簡單解釋一下
@PathVariable的含義:
例如對于上面這一行代碼,我們隻要把參數放在@GetMapping("/login/{username}/{password}")的{username}和{password}裡,在我們的方法中就可以通過
- @PathVariable(value = "username",required = true)String username
- @PathVariable(value = "password",required = true)String password
來把收到的參數分别指派給username和password。
如果簡單總結一下,@PathVariable是一種“顯式地把參數放在url中”的傳參方式。
而這樣一種傳參方式可能導緻url過長,而且Spring對于@PathVariable的處理會有一個比較複雜的流程,頻繁使用這種方式來收參不是一個好的決策。
那麼我們還可以使用什麼方式來進行收參呢?
每種不同的收參方式,也意味着前端要有對應的不同的傳參方式。
常見的方式有:Path,Query,Body,Form-data等。
以下我們會簡單解釋一下幾種方式的不同,并給出相應的背景代碼實作示例。而至于對應的前端如何傳參,請移步到文章末尾的transfer-demo。
一、Path擷取路徑參數,形如……/{argue1}/{argue2}……使用
@PathVariable接收
Controller示例代碼:
@PostMapping("/path/{id}/{name}/{age}")
public String getPath(@PathVariable("id")Integer id,
@PathVariable("name")String name,
@PathVariable("age")Integer age){}
二、Query 擷取查詢參數,形如……?argue1={argue1}&argue2={argue2}……使用
@RequestParam接收
Controller示例代碼:
@PostMapping("/query")
public String getQuery(@RequestParam("id")Integer id,
@RequestParam("name")String name,
@RequestParam("age")Integer age){}
三、Body 擷取body參數,一般使用
@RequestBody,用實體(可以了解為是簡單的Java Bean)接收
Controller示例代碼:
@PostMapping("/body")
public String getBody(@RequestBody Student student){}
四、Form-data 擷取表單參數,一般不使用注解,用實體接收
Controller示例代碼:
@PostMapping("/form_data")
public String getForm_data(Student student){}
最後附我們的transfer-demo的代碼:
(前端邏輯在resourcesstatictest.js中)
transfer-demo
運作項目後打開resources/static檔案夾的test.html即可
單擊start,可以看到四個彈窗,就是我們的前台發送了四個請求,分别由我們背景的四個方法來接收。
tips:
- 在項目的控制層中還注入了一個工具對象gson,這個會在我們的下一節中展開。
- 項目中有一個CorsConfig.java,在本節中沒有涉及到,可以暫時不管。在之後的STEP6.5中會講到,傳送門:STEP6.5 同源政策與跨域資源共享