在翻新中使用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);
我还想其他方式吗?哪个是最常用的?
答案 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()));