Я пытаюсь загрузить массив файлов, заголовок авторизации и объект java.
Проблема заключается в том, как настроен сервер, я не хочу называть аннотацию @Part для своегоDocumentUpdateObject.Есть ли способ разрешить @Part (null) или преобразовать мой пользовательский объект (DocumentUpdateObject) в MultipartBody.Part?Я опубликую несколько примеров, чтобы объяснить лучше.
Массив файлов технически необязателен, поэтому нижеприведенное утверждение отлично работает.
@PUT("document/")
Call<ResponseBody> updateDocument(
@Header("Authorization") String token,
@Body DocumentUpdateObject object);
То, что я хотел бы, чтобы функционал был похож нана это:
@Multipart
@PUT("document/")
Call<ResponseBody> updateDocumentDocs(
@Header("Authorization") String token,
@Part DocumentUpdateObject object,
@Part ArrayList<MultipartBody.Part> files);
Что касается второго параметра, если я не дам @Part имя, @Part("object")
, то произойдет сбой.Если я даю имя @Part, то бэкэнд не сможет его правильно прочитать.Я хочу прочитать его, как @Body выше.
Есть ли код для преобразования объекта в MultipartBody.Part (если это решит его)?Я видел пару решений, но они, кажется, работают только для простых запросов одной строки.Мой DocumentUpdateObject имеет 5 переменных параметров, включая другой объект с еще 5 переменными параметрами.Я рассмотрел MultipartBody.Builder, но, похоже, он не обрабатывает вложенные объекты.
Редактировать: Это все чтение в ожидании формата JSON
Редактировать 2: В основном я смог получить частьобъекта для отправки, разбив его на части, но последний объект внутри него я не смог обработать должным образом.
//These request bodies send properly
RequestBody defncynbrBody =
RequestBody.create(deficiencyNbr, MediaType.parse("application/json"));
RequestBody assetBody =
RequestBody.create(assetnbr, MediaType.parse("application/json"));
RequestBody subassetBody =
RequestBody.create(subassetnbr, MediaType.parse("application/json"));
//This object down here still is unable to be recieved properly
Gson gson = new Gson();
String json = gson.toJson(add);
RequestBody addBody =
RequestBody.create(json, MediaType.parse("application/json"));
Редактировать 3
Это делаетне работает должным образом
Content-Disposition: form-data; name="defncy"
2019-09-25 10:20:24.123 D/OkHttp: Content-Transfer-Encoding: binary
2019-09-25 10:20:24.123 D/OkHttp: Content-Type: application/json; charset=utf-8
2019-09-25 10:20:24.123 D/OkHttp: {"defncytyp":"LOW","descr":"details are here this",
"duedate":"2019-09-23","maintlogcattyp":"INTR","title":"Newest one"}
Тем не менее, этот работает отлично.
2019-09-25 10:31:58.404 D/OkHttp: Content-Type: application/json; charset=UTF-8
2019-09-25 10:31:58.405 D/OkHttp: {"defncy":{"defncytyp":"LOW","descr":"details are here this",
"duedate":"2019-09-23","maintlogcattyp":"INTR","title":"Newest on"},"assetnbr":4,"defncynbr":18,"subassetnbr":0,"usrs_assigned":0}