修补单个字段的最佳实践

时间:2018-10-26 20:24:09

标签: android http retrofit retrofit2 patch

在翻新中使用PATCH请求更新JSON资源的单个字段的最常见且最合适的方法是什么?

我看到了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 :(得分:0)

我通常将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()));