關於JFinal中對應Content-Type爲application/json,text/json的ajax請求參數處理

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請求去測試。謝謝你們觀看,但願有幫到你們哦!

相關文章
相關標籤/搜索