在 Retrofit 中一起使用 @Field 和 @Body 参数
Use @Field and @Body parameters in Retrofit together
我正在使用 Retrofit POST 一些数据到我的后端。我需要发送 3 个字符串和一个自定义 Place 对象。这是我正在做的事情:
@POST("/post/addphoto/")
public void addImage(@Field("image_url") String url, @Field("caption") String caption, @Field("google_place_id") String placeId, @Body Place place, Callback<UploadCallBack> response);
有了这个,我得到了这个错误:
@Field parameters can only be used with form encoding.
当我使用 @FormUrlEncoded
时,像这样:
@FormUrlEncoded
@POST("/post/addphoto/")
public void addImage(@Field("image_url") String url, @Field("caption") String caption, @Field("google_place_id") String placeId, @Body Place place, Callback<UploadCallBack> response);
我收到这个错误:
@FormUrlEncoded or @Multipart can not be used with @Body parameter.
如何让它发挥作用?
终于成功了。 @Body 和@Field 不能一起使用。如果使用了@Body,它应该是唯一的参数,并且不能与@FormUrlEncode 或@MultiPart 结合使用。所以打消了这个念头。另一种选择是仅使用 @Field 并将 Place 对象作为 JSON 字符串发送。
这是我为 API 界面所做的:
@POST("/post/addphoto/")
public void addImage(@Field("image_url") String url, @Field("caption") String caption, @Field("google_place_id") String placeId, @Field("facebook_place") String place, Callback<UploadCallBack> response);
这就是我为 facebook_place
字段创建要发送的值的方式:
Place place = ...
Gson gson = new GsonBuilder().disableHtmlEscaping().create();
String placeJSON = gson.toJson(place);
我正在使用 Retrofit POST 一些数据到我的后端。我需要发送 3 个字符串和一个自定义 Place 对象。这是我正在做的事情:
@POST("/post/addphoto/")
public void addImage(@Field("image_url") String url, @Field("caption") String caption, @Field("google_place_id") String placeId, @Body Place place, Callback<UploadCallBack> response);
有了这个,我得到了这个错误:
@Field parameters can only be used with form encoding.
当我使用 @FormUrlEncoded
时,像这样:
@FormUrlEncoded
@POST("/post/addphoto/")
public void addImage(@Field("image_url") String url, @Field("caption") String caption, @Field("google_place_id") String placeId, @Body Place place, Callback<UploadCallBack> response);
我收到这个错误:
@FormUrlEncoded or @Multipart can not be used with @Body parameter.
如何让它发挥作用?
终于成功了。 @Body 和@Field 不能一起使用。如果使用了@Body,它应该是唯一的参数,并且不能与@FormUrlEncode 或@MultiPart 结合使用。所以打消了这个念头。另一种选择是仅使用 @Field 并将 Place 对象作为 JSON 字符串发送。
这是我为 API 界面所做的:
@POST("/post/addphoto/")
public void addImage(@Field("image_url") String url, @Field("caption") String caption, @Field("google_place_id") String placeId, @Field("facebook_place") String place, Callback<UploadCallBack> response);
这就是我为 facebook_place
字段创建要发送的值的方式:
Place place = ...
Gson gson = new GsonBuilder().disableHtmlEscaping().create();
String placeJSON = gson.toJson(place);