在 Android Retrofit 實現文字(參數)和多張圖片一塊兒上傳 博客中,咱們詳細介紹了多張圖片和文字參數上傳的具體原理和實現,今天咱們重點說說文字參數類型的問題。web
Post請求抓包信息:json
接口定義:服務器
從抓包信息中看到文字類型的參數字段名是「data」,值是「jdsjlzx」。app
其中的Content-Type信息以下:函數
Content-Type: application/json; charset=UTF-8
不管何種請求,Content-Type類型不能錯。請求失敗,排查錯誤首先從這個Content-Type開始,其次是Content-Disposition。測試
下面咱們從一個真實案例來講一說這個Content-Type。spa
從上面圖片中就看到上傳頭像須要傳遞userId、token等參數。.net
後臺接口開發人員測試接口通常在web上面調試好,移動端開發人員就能夠根據接口進行聯調了。3d
web端上傳頭像時請求抓包信息以下所示:調試
上圖紅色箭頭所指之處就是咱們須要注意的地方。
Content-Type類型不是「application/json」,而是「text/plain」。
Content-Type: text/plain; charset=UTF-8
注意:
「@Part("data") String des」在Post請求中默認的Content-Type類型就是「application/json」
接口定義若是按照前面文章介紹的那樣寫,以下圖所示,確定是不行的。
通過網上查資料,咱們找到了解決辦法,參考:http://stackoverflow.com/ques...
「@Part("data") String des」在Post請求中默認的Content-Type類型是「application/json」,這就說明咱們在接口中不能再使用@Part註解了,咱們須要在代碼中指定類型。
主要代碼以下圖所示:
這裏有個toRequestBody函數,主要功能是將文字參數類型轉換爲「text/plain」。
toRequestBody函數以下圖所示:
上傳頭像請求結果抓包信息:
「userId」、「token」等文字參數的類型成功轉換爲了「text/plain」類型。
大功告成,看看服務器返回結果吧。
That's all, thank you.