溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

@RequestParam參數(shù)偶爾丟失怎么辦

發(fā)布時(shí)間:2021-10-25 14:27:14 來源:億速云 閱讀:288 作者:小新 欄目:開發(fā)技術(shù)

這篇文章將為大家詳細(xì)講解有關(guān)@RequestParam參數(shù)偶爾丟失怎么辦,小編覺得挺實(shí)用的,因此分享給大家做個(gè)參考,希望大家閱讀完這篇文章后可以有所收獲。

@RequestParam參數(shù)丟失

改動(dòng)過一版代碼之后, 發(fā)現(xiàn)@RequestParam注解的參數(shù)經(jīng)常丟失.

首先確認(rèn)前端確實(shí)把參數(shù)傳過來了,用curl直接請(qǐng)求接口, 發(fā)現(xiàn)有時(shí)候會(huì)出現(xiàn)參數(shù)丟失, 重啟后再用curl請(qǐng)求某個(gè)丟失參數(shù)的接口, 無論怎么重試都不會(huì)有問題.

沒辦法了, 只好去跟tomcat的源碼, 因?yàn)锧RequestParam的參數(shù)會(huì)從request.getParameterMap()方法里取對(duì)應(yīng)的值, 然后打個(gè)斷點(diǎn)看tomcat怎么獲取的

@RequestParam參數(shù)偶爾丟失怎么辦

最終跟到這個(gè)類里, 實(shí)現(xiàn)方法

@RequestParam參數(shù)偶爾丟失怎么辦

最終走到coyoteRequest的getParameters方法, 實(shí)現(xiàn)很簡(jiǎn)單

@RequestParam參數(shù)偶爾丟失怎么辦

然后getParameterNames();

@RequestParam參數(shù)偶爾丟失怎么辦

最終處理查詢參數(shù)

@RequestParam參數(shù)偶爾丟失怎么辦

最終就是從queryMB這個(gè)參數(shù)解析出來, 這個(gè)queryMB就是請(qǐng)求時(shí)傳過來的參數(shù),

那就看看當(dāng)getParameterMap為空的時(shí)候, queryMB是否為空, 來判定tomcat一定是接到了參數(shù)

@RequestParam參數(shù)偶爾丟失怎么辦

然后發(fā)現(xiàn)queryMB有值, 但是似乎好像上面的方法沒有把這個(gè)參數(shù)解析出來, 開始懷疑一定是某個(gè)接口改了什么東西, 因?yàn)镽equest是可以被循環(huán)利用的, 但是這個(gè)request被再次使用一定是請(qǐng)求結(jié)束了, 后來懷疑是使用了deferedResult, 但也被排除了, 因?yàn)閐eferedResult會(huì)使用servlet3.0以上的異步方式, request不會(huì)被提前循環(huán)使用

百思不得其解的時(shí)候同時(shí)看了這篇文章 豁然開朗,(后來發(fā)現(xiàn)有一個(gè)導(dǎo)入功能比較耗時(shí), 被放在了一個(gè)純異步的方法里, 訪問的方法里有一個(gè)方法被切面切掉了, 并且里面獲取了request.getParameter) request可以傳遞到異步線程, 但要保證在請(qǐng)求返回之前訪問, 如deferedResult set值之前. (為了避免這種情況,還是盡量不要傳到異步線程里了).

@RequestParam的用法注意事項(xiàng)

作用

@RequestParam:將請(qǐng)求參數(shù)綁定到你控制器的方法參數(shù)上(是springmvc中接收普通參數(shù)的注解)

舉例來說:

@RequestParam參數(shù)偶爾丟失怎么辦

如果你的@RequestParam的Value屬性為 pId 那么在請(qǐng)求的鏈接就是

http://localhost:8080/api/findBByParkId?pId=1

@RequestParam屬性

  • value / name:請(qǐng)求參數(shù)中的名稱 (必寫參數(shù))

  • required:請(qǐng)求參數(shù)中是否必須提供此參數(shù),默認(rèn)值是true,true為必須提供default

  • Value:默認(rèn)值 測(cè)試成功

@RequestParam參數(shù)偶爾丟失怎么辦

注意

@RequestParam參數(shù)偶爾丟失怎么辦

關(guān)于“@RequestParam參數(shù)偶爾丟失怎么辦”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,使各位可以學(xué)到更多知識(shí),如果覺得文章不錯(cuò),請(qǐng)把它分享出去讓更多的人看到。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI