#java #android #retrofit2
Есть метод для изменения услуги: @Multipart @PUT("/api/edit/service/{service_id}/{master_id}") ObservableeditService(@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); }
Комментариев нет:
Отправить комментарий