2015-12-20 2 views
5

Retrofitを使用してバックエンドにデータをPOSTしています。私は3つのStringと1つのカスタムPlaceオブジェクトを送る必要があります。ここで私はやっているものです:私はこのような、@FormUrlEncodedを使用する場合Retrofitで@Fieldと@Bodyパラメータを併用する

@Field parameters can only be used with form encoding. 

そして:これにより

@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 
@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. 

どうすればそれを機能させることができますか?

+0

Tiwariさん、あなたはIMAGE_URLをしたい場合、私は知っているかもしれません/ post/addphoto urlに追加するには? – cgr

+0

@cgrいいえ、私はそれを付け加えたくありません。実際には、image_urlはバックエンドに他のフィールドと一緒に保存したい、Facebookの画像のURLです。 Placeオブジェクトは、その画像に関連付けられている位置情報をfacebookから抽出したものです。 –

+0

私が知る限り、要求にデータを保持する場所が1つしかない場合は、RAW(本体)またはForm-shaped(FormUrlEncoded + Part)のいずれかになりますので、ここではそうです1つの場所に2つのデータ構造を混在させようとしていますが、これはできません – Yazan

答えて

2

最後に、動作させました。 @Bodyと@Fieldは一緒に使うことはできません。 @Bodyが使用されている場合、それは唯一のパラメータでなければならず、@FormUrlEncodeまたは@MultiPartと組み合わせることはできません。だからその考えを落とした。別のオプションは@Fieldだけを使用して、PlaceオブジェクトをJSON文字列として送信することでした。

@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フィールドに送信される値を作成する方法である:ここで

は、私はAPIインターフェースのためにしたものです

Place place = ... 
Gson gson = new GsonBuilder().disableHtmlEscaping().create(); 
String placeJSON = gson.toJson(place); 
関連する問題