#java #android #retrofit2
Есть метод для изменения услуги:
@Multipart
@PUT("/api/edit/service/{service_id}/{master_id}")
Observable editService(@Path("service_id") String serviceId,
@Path("master_id") String userId,
@Part MultipartBody.Part avatar,
@Part("title") RequestBody title,
@Part("price") RequestBody price,
@Part("description") RequestBody description,
@Part("period") RequestBody periodInMinutes,
@Part("service_category") RequestBody serviceCategory)
в котором я должен отправлять то поле которое изменилось, либо все поля, включая
изменившееся поле. То есть в выше написанном методе я отправляю все поля.
Но я хочу отправлять только то поле, которое изменилось, типа так:
Observable editService(@Path("service_id") String serviceId,
@Path("master_id") String userId,
@Part("title") RequestBody title)
Только в данном случае я отправляю я отправляю измененный заголовок, так как в аннотации
@Part прописал ключ заголовка - @Part("title").
Таким образом мне придется для каждого поля создать отдельный метод. Мне кажется
это не правильно.
Так вот, возможно ли отправлять все измененные поля с ключами, а в методе editService()
прописать типа:
Observable editService(@Path("service_id") String serviceId,
@Path("master_id") String userId,
@Part RequestBody service)
Может есть решение как скомпоновать поля в один?
Ответы
Ответ 1
Решил задачу с помощью @PartMap В RetrofitServiceApi: @Multipart @PUT("/api/edit/service/{service_id}/{master_id}") ObservableeditService(@Path("service_id") String serviceId, @Path("master_id") String userId, @PartMap Map params); И отправляю: String image = serviceModel.getImage(); String title = serviceModel.getTitle(); String description = serviceModel.getDescription(); String period = serviceModel.getPeriod(); int price = serviceModel.getPrice(); if (!tmpServiceClick.getImage().equals(image)) { parameters.putAll(RetrofitRequestUtil.fileToRequestBodyMap(file, "avatar")); } if (!tmpServiceClick.getTitle().equals(title)) { parameters.put("title", RetrofitRequestUtil.toRequestBody(title)); } if (!tmpServiceClick.getDescription().equals(description)) { parameters.put("description", RetrofitRequestUtil.toRequestBody(description)); } if (!tmpServiceClick.getPeriod().equals(period)) { parameters.put("period", RetrofitRequestUtil.toRequestBody(period)); } if (tmpServiceClick.getPrice() != price) { parameters.put("price", RetrofitRequestUtil.toRequestBody(String.valueOf(price))); } retrofitInterface.editService(masterId, serviceModel.getPublicId(), parameters)) Класс RetrofitRequestUtil: public static RequestBody toRequestBody(String value) { return RequestBody.create(MediaType.parse("text/plain"), value); }
Комментариев нет:
Отправить комментарий