在Reform中,用PATCH
请求更新JSON资源的单个字段最常见、最合适的方法是什么?
我看到了3种方法:
-
使用
@Body
发送完整对象,同时将不应该更新的字段保留为null
,因此GSON将删除它们:@PATCH("posts/{id}") Call<Post> patchPost(@Path("id") int id, @Body Post post);
-
使用
@FormUrlEncoded
,只传递应该更新的字段,例如使用@FieldMap
。@FormUrlEncoded @PATCH("posts/{id}") Call<Post> patchPost(@Path("id") int id, @FieldMap Map<String, String> fields);
-
定义一个只包含应该更新的字段的自定义模型类,这样我们就不必将任何内容设置为
null
。@PATCH("posts/{id}") Call<Post> patchPost(@Path("id") int id, @Body PostUpdate postUpdate);
我是否错过了其他方式?哪一种是最常用的?
我通常将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()));