Android Retrofit 實現圖文上傳-文字參數類型

回顧

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.

相關文章
相關標籤/搜索