Рекомендации по модернизации для ПАТЧИРОВКИ отдельных полей - PullRequest
0 голосов
/ 26 октября 2018

Какой самый распространенный и подходящий способ обновить отдельные поля ресурса JSON с помощью запроса PATCH в Retrofit?

Я вижу 3 способа сделать это:

  1. Используя @Body для отправки полного объекта, оставляя поля, которые не должны обновляться как null, поэтому GSON удалит их:

    @PATCH("posts/{id}")
    Call<Post> patchPost(@Path("id") int id, @Body Post post);
    
  2. Используя @FormUrlEncoded и передавайте только те поля, которые должны быть обновлены, например, с помощью @FieldMap.

    @FormUrlEncoded
    @PATCH("posts/{id}")
    Call<Post> patchPost(@Path("id") int id, @FieldMap Map<String, String> fields);
    
  3. Определение пользовательского класса модели, который содержит только те поля, которыедолжно быть обновлено, поэтому нам не нужно ничего устанавливать на null.

    @PATCH("posts/{id}")
    Call<Post> patchPost(@Path("id") int id, @Body PostUpdate postUpdate);
    

Я пропускаю другие способы?Какой из них наиболее часто используется?

1 Ответ

0 голосов
/ 26 октября 2018

Я обычно использую JSON с RequestBody (Okhttp).JSON-объект включает в себя только соответствующие поля.И тогда я конвертирую это RequestBody.Это как ниже:

@PATCH(RestConstants.POST_EMPTY)
Call<EmptyResponseModel> postEmpty(@Body RequestBody body);


MediaType MEDIA_TYPE_JSON = MediaType.parse("application/json; charset=utf-8");
RequestBody body = RequestBody.create(MEDIA_TYPE_JSON, json.toString()));
...