Я использую следующий код для отправки многостраничного запроса, содержащего тип с несколькими параметрами:
@Multipart
@POST("**")
fun sendRequest(
@Part("ContactType") contactType: RequestBody? = null,
@Part("Description") description: RequestBody? = null,
@Part("ServiceProviderId") serviceProviderId: RequestBody? = null,
@Part("Title") title: RequestBody? = null,
@Part("Latitude") latitude: RequestBody? = null,
@Part("Mobile") mobile: RequestBody? = null,
@Part("Longitude") longitude: RequestBody? = null,
@Query("MainActivities[]") mainActivities :ArrayList<String>,
@Part("Files") files: List<MultipartBody.Part>
): Observable<SendRequestResponse>
Вот как я устанавливаю значение:
val titleBody = createBodyRequestFromString(title.value ?: "")
val latitudeBody = createBodyRequestFromString(lat.value ?: "")
val longitudeBody = createBodyRequestFromString(lng.value ?: "")
val contactTypeBody = createBodyRequestFromString(contactType.value.toString() ?: "")
val serviceProviderIdBody = createBodyRequestFromString(serviceProviderId.value ?: "")
val mobileBody = createBodyRequestFromString(phoneNumber.value ?: "")
val mainActivitiesBody: ArrayList<RequestBody> = ArrayList()
createBodyRequestFromString(mainActivities.value?.get(0)).let { mainActivitiesBody.add(it) }
private fun createBodyRequestFromString(string: String?): RequestBody {
return RequestBody.create("text/plain".toMediaTypeOrNull(), string!!)
}
private fun addFileAsMultipart() {
val imagesParts = ArrayList<MultipartBody.Part>(selectedImages.size)
selectedImages.forEachIndexed { index, file ->
val requestBody = RequestBody.create("image/jpeg".toMediaTypeOrNull(), file)
imagesParts.add(
MultipartBody.Part.createFormData(
"files",
file.name,
requestBody
)
)
}}
Это продолжает говорить:
@ Параметры детали, использующие MultipartBody.Part, не должны включать имя детали в аннотацию. (параметр # 10)
И когда я получаю файлы, серверная часть не может получить мои значения RequestBody.
Как я могу отправить несколько частей, которые содержат массив строки и массив файлов?