首页 > 解决方案 > 如何通过改造使用 addFormDataPart 发送对象数组列表?

问题描述

我有这样的请求正文,它包含对象数组

{
    "api_token" : "1572370159",
    "latt":29.970245729247,
    "lang": 31.14269679235,
    "patient_id":1,
    "insurance" : 0,
    "delivery" : 0,
    "notes": "notes",
    "photo": "",
    "orderDetails": [

        {"medicine_id": 1, "medicine_type_id": 1, "amount": 2},
        {"medicine_id": 1, "medicine_type_id": 1, "amount": 2},
        {"medicine_id": 1, "medicine_type_id": 1, "amount": 2},
        {"medicine_id": 1, "medicine_type_id": 1, "amount": 2},
        {"medicine_id": 1, "medicine_type_id": 1, "amount": 2},
        {"medicine_id": 1, "medicine_type_id": 1, "amount": 2},
        {"medicine_id": 1, "medicine_type_id": 1, "amount": 2},
        {"medicine_id": 1, "medicine_type_id": 1, "amount": 2},
        {"medicine_id": 1, "medicine_type_id": 1, "amount": 2},
        {"medicine_id": 2, "medicine_type_id": 2, "amount": 1}
    ]
}

如果我没有发送 orderDetails 一切都很好,所以我如何发送它是我的代码:

我的终点

@POST("pharmacy/order/create")
    fun createPharmacyOrder(@Body requestBody: RequestBody)
            : Call<PharmacyOrderResponse>

这是尝试使用 addFormDataPart 发送此列表的代码

fun createPharmacyOrder(request :MedicineOrderRequest, callback: BaseResponseListener<PharmacyOrderResponse>) {
        val builder = MultipartBody.Builder()
        builder.setType(MultipartBody.FORM)
        builder.addFormDataPart("api_token" , request.api_token)
        builder.addFormDataPart("latt" , request.latt.toString())
        builder.addFormDataPart("lang" , request.lang.toString())
        builder.addFormDataPart("patient_id" , request.patient_id.toString())
        builder.addFormDataPart("insurance" , request.insurance.toString())
        builder.addFormDataPart("delivery" , request.delivery.toString())
        builder.addFormDataPart("notes" , request.notes)
        //request.orderDetails: ArrayList<OrderDetail>
        if (request.orderDetails.size > 0)
                builder.addFormDataPart("orderDetails"
                    , Gson().toJson(request.orderDetails)
                )

        if (!request.photo.equals("")) {
            with(File(request.photo)){
                builder.addPart(MultipartBody.Part.createFormData("photo",name
                , RequestBody.create(MediaType.parse("image/*"),this)))
            }
        }

        val service = ApiConfigure.mainRetrofit.create(ApiEndPoint::class.java)
        val call: Call<PharmacyOrderResponse> = service.createPharmacyOrder(builder.build())
        call.start(callback)
    }

标签: androidkotlinretrofit

解决方案


请尝试在键中使用 []。像这样:

builder.addFormDataPart("orderDetails[]", Gson().toJson(request.orderDetails))


推荐阅读