1、問題場景
前端axios發送get請求,攜帶參數:
- gwmc: 字元串,崗位名稱
- 改字段内容最開始由前端表格導入,存入資料庫,在查詢資料庫擷取
- 表格導入,内容可能會換行
查詢資料庫内容,後端為Java web項目,所用架構
- springboot
- mybatis
- oracle
2、具體問題
: gwmc查詢參數為待換行的字元串,後端request接收之後,在擷取,換行不見了變為一個空格。
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIyVGduV2YfNWawNyZuBnL0YjY3UDNxUjM3UmM0U2M5czMzQDOyQmNidjNkZmZ5gzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
- 後端request.getParameter(“gwmc”),得到的參數是:基層班站 副站長,回車換行變為一個空格
然後查詢的時候當然不會比對上,導緻查詢不出資料。
3、解決方案
3.1、HttpServletRequest request 方式接收參數改為對象或者變量接收
當參數個數少于比較少,可以直接使用變量接收;當參數個數比較多的時候,建議封裝對象,用對象接收參數。
此時接收的字元串原樣保留回車換行,查詢正常。
3.2、編碼解碼
這種方式就是在前端發送異步請求之前,對改字段編碼,比如url編碼,然後,後端接收之後以同樣的方式解碼;
對比:
- 優點不論内容如何,都能原樣恢複
- 缺點:多執行了編碼和解碼,過程變複雜和開銷變大
思考:
- HttpServletRequest request 底層是怎麼樣接收參數,request.getParameter(“gwmc”)又是怎麼樣解析參數的呢?
- 變量或者對象接收參數,底層有是怎麼實作的呢?
因為目前對架構底層沒啥研究,暫時不了解底層原理,有興趣的小夥伴,可自行查詢相關文檔,等後續深入學習架構底層的時候,在研究。