@RequestParam 參數(shù)偶爾丟失的解決
@RequestParam參數(shù)丟失
改動(dòng)過一版代碼之后, 發(fā)現(xiàn)@RequestParam注解的參數(shù)經(jīng)常丟失.
首先確認(rèn)前端確實(shí)把參數(shù)傳過來了,用curl直接請求接口, 發(fā)現(xiàn)有時(shí)候會(huì)出現(xiàn)參數(shù)丟失, 重啟后再用curl請求某個(gè)丟失參數(shù)的接口, 無論怎么重試都不會(huì)有問題.
沒辦法了, 只好去跟tomcat的源碼, 因?yàn)锧RequestParam的參數(shù)會(huì)從request.getParameterMap()方法里取對應(yīng)的值, 然后打個(gè)斷點(diǎn)看tomcat怎么獲取的
最終跟到這個(gè)類里, 實(shí)現(xiàn)方法
最終走到coyoteRequest的getParameters方法, 實(shí)現(xiàn)很簡單
然后getParameterNames();
最終處理查詢參數(shù)
最終就是從queryMB這個(gè)參數(shù)解析出來, 這個(gè)queryMB就是請求時(shí)傳過來的參數(shù),
那就看看當(dāng)getParameterMap為空的時(shí)候, queryMB是否為空, 來判定tomcat一定是接到了參數(shù)
然后發(fā)現(xiàn)queryMB有值, 但是似乎好像上面的方法沒有把這個(gè)參數(shù)解析出來, 開始懷疑一定是某個(gè)接口改了什么東西, 因?yàn)镽equest是可以被循環(huán)利用的, 但是這個(gè)request被再次使用一定是請求結(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可以傳遞到異步線程, 但要保證在請求返回之前訪問, 如deferedResult set值之前. (為了避免這種情況,還是盡量不要傳到異步線程里了).
@RequestParam的用法注意事項(xiàng)
作用
@RequestParam:將請求參數(shù)綁定到你控制器的方法參數(shù)上(是springmvc中接收普通參數(shù)的注解)
舉例來說:
如果你的@RequestParam的Value屬性為 pId 那么在請求的鏈接就是
http://localhost:8080/api/findBByParkId?pId=1
@RequestParam屬性
value / name
:請求參數(shù)中的名稱 (必寫參數(shù))required
:請求參數(shù)中是否必須提供此參數(shù),默認(rèn)值是true,true為必須提供defaultValue
:默認(rèn)值 測試成功
注意
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
SpringBoot http post請求數(shù)據(jù)大小設(shè)置操作
這篇文章主要介紹了SpringBoot http post請求數(shù)據(jù)大小設(shè)置操作,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-09-09怎樣通過反射獲取非靜態(tài)內(nèi)部類實(shí)例
這篇文章主要介紹了怎樣通過反射獲取非靜態(tài)內(nèi)部類實(shí)例,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-03-03解決SpringMVC、tomcat、Intellij idea、ajax中文亂碼問題
這篇文章主要介紹了解決SpringMVC、tomcat、Intellij idea、ajax中文亂碼問題,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-09-09maven加載依賴報(bào)錯(cuò)的原因分析及解決方法
通常我們在項(xiàng)目中引入第三方依賴包時(shí),為了避免其版本迭代問題,經(jīng)常會(huì)使用本地的包,這篇文章主要給大家介紹了關(guān)于maven加載依賴報(bào)錯(cuò)的原因分析及解決方法的相關(guān)資料,需要的朋友可以參考下2023-10-10Spring的攔截器HandlerInterceptor詳解
這篇文章主要介紹了Spring的攔截器HandlerInterceptor詳解,攔截器是相對于Spring中來說的,它和過濾器不一樣,過濾器的范圍更廣一些是相對于Tomcat容器來說的,攔截器可以對用戶進(jìn)行攔截過濾處理,需要的朋友可以參考下2024-01-01Java時(shí)間類庫Timer的使用方法與實(shí)例詳解
這篇文章主要介紹了Jave時(shí)間類庫Timer的使用方法與實(shí)例詳解,需要的朋友可以參考下2020-02-02SpringMVC?HttpMessageConverter報(bào)文信息轉(zhuǎn)換器
這篇文章主要為大家介紹了SpringMVC?HttpMessageConverter報(bào)文信息轉(zhuǎn)換器,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-05-05