Http請求頭的Content-Type的幾種格式和對應的后端參數獲取


今天在前后端聯調開發過程中,出現了一個后端通過request.getParameterMap()方法獲取不到請求參數的問題,所以在此做一個記錄,並提出解決方案。

首先,出現問題是因為數據格式為Request Payload,是在react使用axios進行ajax請求的時候出現的,原來,axios中默認請求頭的編碼為application/json;charset=UTF-8,即Content-Type = "application/json;charset=UTF-8",這個時候可以通過數據流的讀取進行參數解析,經測試,方法為通用方法,對於ajax請求適用,代碼如下
————————————————
版權聲明:本文為CSDN博主「z-m-k」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/q1937915896/article/details/89556682

 

//將請求參數類型為request payload格式的請求參數封裝成一個Map
    //該方法為通用方法
    public static Map<String,String> requestPayload2Map(HttpServletRequest request){
        Map<String,String> reqParams = new HashMap<>();
        StringBuilder sb = new StringBuilder();
        //從請求流中讀取數據
        try( BufferedReader reader = request.getReader();)
        {
            char[] buffer = new char[1024];
            int len = 0;
            while((len = reader.read(buffer))!=-1){
                sb.append(buffer,0,len);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
 
        System.out.println("數據為:"+sb.toString());
        JSONObject object = JSONObject.fromObject(sb.toString());
        for (Object key :object.keySet()) {
            reqParams.put((String)key,(String)object.get(key));
        }
        return reqParams;
    }

這里,我們修改了Content-Type的值,application/x-www-form-urlencoded是窗體數據被編碼為名稱/值對。這是標准的編碼格式我們就有一個疑問,為什么我們的那個方法依然失效呢,經過多種方式測試,發現,我們要使用的方法如果在后台的得到的數據格式為XX1=XXX1&XX2=XXX2,那么我們就可以使用成功了,即通過表單的action方式

當使用表單的action提交的時候,如果設置了屬性encType = "multipart/form-data",那么后台獲取到的數據格式為:
————————————————
版權聲明:本文為CSDN博主「z-m-k」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/q1937915896/article/details/89556682

數據為:------WebKitFormBoundaryN4vBMLIkQoIBjLqe
Content-Disposition: form-data; name="usename"
 
liming
------WebKitFormBoundaryN4vBMLIkQoIBjLqe
Content-Disposition: form-data; name="password"
 
123456
------WebKitFormBoundaryN4vBMLIkQoIBjLqe--
 

  

此時的Content-Type為Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryN4vBMLIkQoIBjLqe,所以建議在使用ajax的時候,最好使用通用方法進行參數獲取,以便少走彎路。。。
————————————————
版權聲明:本文為CSDN博主「z-m-k」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/q1937915896/article/details/89556682


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM