android - 如何通过改造使用 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)
}
解决方案
请尝试在键中使用 []。像这样:
builder.addFormDataPart("orderDetails[]", Gson().toJson(request.orderDetails))
推荐阅读
- r - C 堆栈使用量太接近限制
- blockchain - 使用 indy-cli 创建池时出错
- python - 在 Python 中给定时间后退出尝试尝试
- html - 图像固定宽度的 css 浮动框中的 html+css 错误
- javascript - HMS AnalyticsKit Demo for Javascript 无法访问服务器
- php - Laravel 8.9.0 Auth Sacffolding 出现错误您的要求无法解决为一组可安装的软件包
- angular - 如何使 .position-sticky 停止在另一个角度组件(导航栏)下方?
- angular - Angular 8 在身份验证完成之前抑制 HTTP 调用
- r - 绘制参与者反应时间的直方图和点图?
- python - 显示分组依据结果,但将所有项目的不存在结果填充为 0