POST請(qǐng)求和GET請(qǐng)求怎么傳遞和接收解析參數(shù)

本篇內(nèi)容介紹了“POST請(qǐng)求和GET請(qǐng)求怎么傳遞和接收解析參數(shù)”的有關(guān)知識(shí),在實(shí)際案例的操作過(guò)程中,不少人都會(huì)遇到這樣的困境,接下來(lái)就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

創(chuàng)新互聯(lián)專注于企業(yè)網(wǎng)絡(luò)營(yíng)銷推廣、網(wǎng)站重做改版、仁布網(wǎng)站定制設(shè)計(jì)、自適應(yīng)品牌網(wǎng)站建設(shè)、H5技術(shù)商城網(wǎng)站建設(shè)、集團(tuán)公司官網(wǎng)建設(shè)、成都外貿(mào)網(wǎng)站建設(shè)、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁(yè)設(shè)計(jì)等建站業(yè)務(wù),價(jià)格優(yōu)惠性價(jià)比高,為仁布等各大城市提供網(wǎng)站開(kāi)發(fā)制作服務(wù)。

 1. 前言

接口參數(shù)應(yīng)該怎么傳遞是每個(gè)項(xiàng)目應(yīng)該面對(duì)的問(wèn)題,這跟編程語(yǔ)言無(wú)關(guān),今天來(lái)總結(jié)一波常用的接口參數(shù)傳遞方式。

2. GET 請(qǐng)求

GET 請(qǐng)求一般用來(lái)向服務(wù)器請(qǐng)求獲取數(shù)據(jù)。總體來(lái)說(shuō)目前有兩種傳參風(fēng)格類型。

多參數(shù)拼接

這是我們最常見(jiàn)的傳遞方式,它一般傳參方式如下:

GET /api/v1/user?name=felord.cn&age=18 HTTP/1.1 Host: localhost:8080

規(guī)則為:參數(shù)和 URI 之間用問(wèn)號(hào)?隔開(kāi),  參數(shù)鍵值用等號(hào)=連接,然后參數(shù)之間用連接符&拼接起來(lái),如樣例中的name=felord.cn&age=18。在 Spring MVC  中這種參數(shù)可以被對(duì)象接收:

@GetMapping("/user") public Rest<?> urlEncode(User params) {     // params.name = felord.cn     // params.age = 18     return RestBody.okData(params); }

通過(guò)HttpServletRequest#getParameter(String key)也獲取上述方式攜帶的參數(shù),但是一般這種方式建議在 Servlet  Filter 過(guò)濾器使用,而不建議在接口中使用。Spring MVC  攔截器獲取參數(shù)的底層也是該方式實(shí)現(xiàn)的。但是我也發(fā)現(xiàn)很多人在接口中使用此不合理的方式。

另外 URL 的長(zhǎng)度是有限制的,如果 GET 請(qǐng)求包含了過(guò)于復(fù)雜的參數(shù)組合,說(shuō)明業(yè)務(wù)設(shè)計(jì)是有問(wèn)題的。

路徑標(biāo)識(shí)參數(shù)

還有一種方式就是路徑參數(shù),這種參數(shù)是期望獲取數(shù)據(jù)的標(biāo)識(shí),一般為數(shù)據(jù)的唯一標(biāo)識(shí)或者分頁(yè)參數(shù)。例如查詢標(biāo)識(shí)為1的用戶:

GET /api/v1/user/1 HTTP/1.1 Host: localhost:8080

查詢第1頁(yè)(每頁(yè)10條)的用戶:

GET /api/v1/users/1/10 HTTP/1.1 Host: localhost:8080

在 Spring MVC 中這種參數(shù)需要通過(guò)@PathVariable來(lái)處理:

@GetMapping("/user/{userId}") public Rest<?> urlEncode(@PathVariable("userId") String userId) {     return RestBody.okData(userId); }

DELETE 請(qǐng)求也推薦使用路徑參數(shù)

3. POST/PUT 請(qǐng)求

GET 請(qǐng)求是從服務(wù)端獲取數(shù)據(jù)的,而 POST 請(qǐng)求則是向服務(wù)端發(fā)送數(shù)據(jù)。很多不清楚它們之間區(qū)別的同學(xué)會(huì)混用它們。我見(jiàn)過(guò)使用 GET  請(qǐng)求修改數(shù)據(jù)的,也見(jiàn)過(guò)使用 POST 請(qǐng)求來(lái)查詢結(jié)果的。雖然它們可以完成期望的工作但是它們之間還是有很大的差別的,這里不得不重復(fù)一下:

  • GET 請(qǐng)求可以直接在瀏覽器直接請(qǐng)求當(dāng)然也會(huì)保留在瀏覽器歷史記錄里,而 POST 不可以。

  • GET 請(qǐng)求是天然冪等性的,而 POST 不是。

  • GET 請(qǐng)求會(huì)被瀏覽器主動(dòng)緩存,而 POST 不會(huì),除非手動(dòng)設(shè)置。

  • GET 請(qǐng)求只能進(jìn)行 URI 編碼,而 POST 支持多種編碼方式。

  • 對(duì)參數(shù)的數(shù)據(jù)類型,GET 只接受 ASCII 字符,而 POST 沒(méi)有限制。

  • GET 比 POST 更不安全,因?yàn)閰?shù)直接暴露在 URL 上,所以不能用來(lái)傳遞敏感信息。

  • GET 參數(shù)通過(guò) URL 傳遞,而且是有長(zhǎng)度限制的,POST 放在請(qǐng)求體中,沒(méi)有長(zhǎng)度限制。

GET 請(qǐng)求會(huì)把請(qǐng)求頭和 DATA 一并發(fā)送出去,然后服務(wù)器響應(yīng);而對(duì)于 POST 請(qǐng)求會(huì)先發(fā)送請(qǐng)求頭告訴服務(wù)器請(qǐng)求的編碼方式等等,然后服務(wù)器響應(yīng) 100  continue 后客戶端再把編碼后的 DATA 發(fā)送給服務(wù)器,由服務(wù)器作出響應(yīng)。另外如果不使用 HTTPS,POST 請(qǐng)求也無(wú)法保證數(shù)據(jù)的安全傳輸。

表單提交

POST 請(qǐng)求最長(zhǎng)使用的場(chǎng)景是表單提交,比如登錄:

<form action="/login" method="POST">     First name: <input type="text" name="username"><br>     Last name: <input type="password" name="password"><br>   <input type="submit" value="登錄"> </form>

這種方式是 POST 的默認(rèn)方式,Content-Type為application/x-www-form-urlencoded。樣例如下:

POST /login HTTP/1.1 Host: localhost:8080 Content-Type: application/x-www-form-urlencoded  username=felord.cn&password=felord.cn

參數(shù)的組織方式參考 GET 請(qǐng)求,但是不是放在 URL  中而是放在請(qǐng)求體中,另外必須顯式聲明Content-Type為application/x-www-form-urlencoded。Spring MVC  中我們可以直接使用對(duì)象來(lái)接收:

@PostMapping("/login") public Rest<?> doLogin(LoginDTO params) {     // params.username = felord.cn     // params.password = felord.cn     return RestBody.okData(params); }

上面的登錄也可以使用multipart/form-data方式來(lái)請(qǐng)求:

POST /login HTTP/1.1 Host: localhost:8080 Content-Type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW  ----WebKitFormBoundary7MA4YWxkTrZu0gW Content-Disposition: form-data; name="username"  felord.cn ----WebKitFormBoundary7MA4YWxkTrZu0gW Content-Disposition: form-data; name="password"  felord.cn ----WebKitFormBoundary7MA4YWxkTrZu0gW

multipart/form-data將表單中的每個(gè)input轉(zhuǎn)為了一個(gè)由boundary分割的小格式,沒(méi)有轉(zhuǎn)碼,直接將 UTF-8  字節(jié)拼接到請(qǐng)求體中,在本地有多少字節(jié)實(shí)際就發(fā)送多少字節(jié),極大提高了效率,適合傳輸長(zhǎng)字節(jié),通常我們用來(lái)上傳文件等大字節(jié)。例如我們將路徑C:/Users/felord/Desktop/spring-security.pdf文件以myFile為標(biāo)識(shí)名上傳到服務(wù)器:

POST /foo/upload HTTP/1.1 Host: localhost:8080 Content-Type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW  ----WebKitFormBoundary7MA4YWxkTrZu0gW Content-Disposition: form-data; name="myFile"; filename="/C:/Users/felord/Desktop/spring-security.pdf" Content-Type: application/pdf  (data) ----WebKitFormBoundary7MA4YWxkTrZu0gW

對(duì)應(yīng)的 Spring MVC 接口為:

@PostMapping("/upload")  public Rest<?> urlEncode(@RequestPart("myFile") MultipartFile file) {      String originalFilename = file.getOriginalFilename();      return RestBody.okData(originalFilename);  }

請(qǐng)注意 Spring MVC 文件大小默認(rèn)是10485760bytes。

Ajax POST 請(qǐng)求

目前大部分都是前后端分離了,所以除了上傳之外的 POST  請(qǐng)求更多建議將數(shù)據(jù)使用JSON的形式提交給服務(wù)器。當(dāng)我們需要新增一個(gè)name為felord、age為18的User時(shí)建議這么做:

POST /user/add HTTP/1.1 Host: localhost:8080 Content-Type: application/json  {     "name": "felord",     "age": 18 }

將參數(shù)封裝為JSON并放入請(qǐng)求體提交給后端。

@PostMapping("/user/add") public Rest<?> add(@RequestBody User user) {     return RestBody.okData(user); }

“POST請(qǐng)求和GET請(qǐng)求怎么傳遞和接收解析參數(shù)”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!

新聞標(biāo)題:POST請(qǐng)求和GET請(qǐng)求怎么傳遞和接收解析參數(shù)
本文鏈接:http://m.kartarina.com/article38/pipspp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站改版搜索引擎優(yōu)化定制開(kāi)發(fā)建站公司全網(wǎng)營(yíng)銷推廣網(wǎng)站排名

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)
主站蜘蛛池模板: 精品无码一区二区三区爱欲| 免费A级毛片无码视频| 中文字幕无码播放免费| 免费无码一区二区三区| 亚洲av无码av在线播放| 亚洲精品无码专区久久久| 亚洲成a∨人片在无码2023| 人妻系列AV无码专区| 无码高潮少妇毛多水多水免费| 国产成人亚洲综合无码精品| 国产午夜av无码无片久久96| 亚洲VA中文字幕不卡无码| 乱人伦人妻中文字幕无码久久网| 人妻无码久久一区二区三区免费| 无码国产亚洲日韩国精品视频一区二区三区 | 精品久久久久久无码中文字幕漫画| 精品一区二区无码AV| 国语成本人片免费av无码| 久久久久久久亚洲Av无码| 中文字幕无码精品三级在线电影| 无码少妇丰满熟妇一区二区| JAVA性无码HD中文| 免费无码一区二区三区| 亚洲av无码精品网站| 丰满日韩放荡少妇无码视频| 亚洲人成国产精品无码| 无码一区二区三区中文字幕| 亚洲AV无码资源在线观看 | 亚洲av无码成人黄网站在线观看| 无码一区二区三区亚洲人妻| 久久久国产精品无码一区二区三区 | 亚洲看片无码在线视频| 91精品久久久久久无码 | 亚洲中文字幕久久精品无码VA| 亚洲爆乳精品无码一区二区三区| 亚洲中文字幕无码不卡电影 | 久久久久亚洲精品无码系列| 亚洲精品无码鲁网中文电影| 国产成人精品无码一区二区| 亚洲中文字幕无码中文字在线| 亚洲精品无码成人片在线观看|