ajax傳json或在後端經過HttpPost提交請求時,設置的Content-Type:application/json或者text/json時,request.getParameter()並不能取到對應的參數,就會致使JFinal的Controller中getPara()方法也沒法取到對應的參數。我對對Final稍加改動可輕鬆應對json請求參數。ajax
圖片.png (這是個人請求頭) 圖片.png (這是請求參數)
以上截圖來自firebug 證實前臺 js 準確無誤,可是後臺卻接收不到requst的parameterspring
圖片.pngjson
調查緣由發現原來是request無法獲取到請求參數,那麼對應的getpara方法天然也就沒法獲取到對應的請求參數;查閱資料發現springMvc中又經過註解解決這一現象。(想了解本身去百度)可是jfinal開發中忽然遇到這個問題,非常棘手,前臺代碼來自於bootstrap-table框架,不方便修改content-type,因此只能分析後臺,經過對http請求的分析,若是,咱們鎖定了request的content-type,不管什麼請求的參數均可以暴力讀取。因此在jfinal源碼中的HttpKit中找到了以下方法。bootstrap
圖片.png後端
這個時候問題也就迎刃而解了。app
下面對於該問題解決提出4種策略。框架
直接讀取方法測試
咱們在controller中已知某個請求的參數會是以上類型並且無其餘雜項的時候,直接 讀取code
圖片.png繼承
圖片.png
咱們經過輸出發現json被讀取了出來。
經過配置Handler來對這種類型數據預處理
圖片.png
經過Handler預處理這種json數據而後在controller中經過獲取Attr的方式獲取對應的數據
圖片.png
經過配置Interceptor預處理
圖片.png
其餘跟上一方法同樣。
寫BaseController,當一個項目中大量使用這種交互的時候,又不是全部成員都對這個問題很瞭解的時候,建議這樣用
圖片.png
添加這樣的抽象類。讓全部Controller繼承BaseController而且在Controller中重載getPara系列方法,只要判斷一下是否是以上類型的content-type,這樣全部成員操做變量習慣不改變,問題也獲得解決
圖片.png
圖片.png
同樣輸出正確結果。
關於這個問題,有想深刻探究能夠自行了解HTTP協議,content-type等相關知識,博主但願你們之後能繞過這個坑,不要像我整了一個下午,才弄明白,因此給你們分享點知識,關於這個狀況沒有遇到的也能夠本身編寫ajax請求去測試。謝謝你們觀看,但願有幫到你們哦!