簡體   English   中英

I want to pass json object as a raw data using @Body in retrofit, but I am unable to add an image file inside the Request Object, how can I achieve it

[英]I want to pass json object as a raw data using @Body in retrofit, but I am unable to add an image file inside the Request Object, how can I achieve it

我需要傳遞的 JSON 格式的數據是:

{
   "user":{
      "email":"xxxx",
      "password":"xxxx",
      "first_name":"XXXX",
      "last_name":"XXXX",
      "date_of_birth":"XXXX",
      "image":"myFile.jpg",
      "location":"XXXX",
      "my_list1":[
         {
            "first_name":"XXXX",
            "last_name":"XXXX",
            "telephone_number":"XXXX"
         },
         {
            "first_name":"XXXX",
            "last_name":"XXXX",
            "telephone_number":"XXXX"
         }
      ],
      "my_list2":[
         {
            "id":"1"
         },
         {
            "id":"2"
         }
      ]
   }
}

使用時我無法在 mainRequestObj 中添加圖像:

@POST("users")
Call<MainResponse> register(@Header("abc") String abc,@Body MainRequestObj mainRequestObj);

有什么方法可以將圖像作為原始正文格式的文件傳遞? 我正在使用 retrofit 2.9.0。 提前致謝!

您必須為您的POST API 使用表單數據,然后您就可以實現這一點。 您還必須從后端開發人員那里獲得一些幫助。 檢查下面的示例代碼。 試試這個方法,讓我知道你的發現

@Multipart
@POST("expenses/upload")
Observable<UploadExpensesWithImageResponse> uploadExpensesWithImageAPI(
        @Header("Authorization") String accessToken,
        @Part  MultipartBody.Part[] picture,
        @Part("store_id") RequestBody store_id,
        @Part("amount") RequestBody amount,
        @Part("expense_date") RequestBody expense_date);

在此處輸入圖像描述

您可以將 bitmap 轉換為 base64 字符串並將其發送到服務器。

但是您應該發送多部分請求。 當我閱讀您的評論時,有一個您想要發送到服務器的對象列表。 您應該創建一個包含數據列表的 POJO,然后將其與多部分請求一起發送。

這是一些代碼示例:

class SyncUpData {
@SerializedName("Products")
var products: List<ProductDTO>? = null

@SerializedName("ProductTax")
var productTax: List<ProductTaxDTO>? = null
}

並與您的多部分請求一起執行以下操作:

    val str = GsonBuilder().create().toJson(syncUpObj)
    val jsonObject: JSONObject = JSONObject(str)
    val body = jsonObject.toString(1)
    
    val syncUp = RequestBody.create("multipart/form-data".toMediaTypeOrNull(), body)

您的 API 致電:

@Multipart
@POST("")
Call<ResponseDTO> syncUpNow(@Part MultipartBody.Part[] images,
                                        @Part("syncUp") RequestBody myObj

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM