2015-12-20 7 views
5

Ich verwende Retrofit, um einige Daten an mein Back-End POST. Ich muss 3 Strings und ein benutzerdefiniertes Place-Objekt senden. Hier ist, was ich tue:Verwenden Sie @Field und @ Body-Parameter in Retrofit zusammen

@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); 

Damit ich diesen Fehler:

@Field parameters can only be used with form encoding. 

Und wenn ich @FormUrlEncoded verwenden, wie folgt aus:

@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); 

ich diesen Fehler :

@FormUrlEncoded or @Multipart can not be used with @Body parameter. 

Wie kann ich es funktionieren lassen?

+0

Tiwari, kann ich wissen, ob Sie image_url wollen an/post/addphoto url angehängt werden? – cgr

+0

@cgr Nein, ich möchte es nicht anhängen. Eigentlich ist image_url die URL eines Bildes von Facebook, das ich zusammen mit einigen anderen Feldern im Backend speichern möchte. Das Place-Objekt wird für den Standort abgerufen, der mit diesem aus Facebook extrahierten Bild verknüpft ist. –

+0

Soweit ich weiß, müssen Sie die Situation betrachten, als ob Sie nur 1 Platz haben, um die Daten in der Anfrage zu halten, es wird entweder RAW (Körper) oder Form-förmig sein (FormUrlEncoded + Part), also hier ist es wie Sie versuchen, 2 Datenstrukturen an einem Ort zu mischen, dies ist nicht möglich – Yazan

Antwort

2

Schließlich hat es funktioniert. @Body und @Field können nicht zusammen verwendet werden. Wenn @Body verwendet wird, sollte es der einzige Parameter sein und kann nicht mit @FormUrlEncode oder @MultiPart kombiniert werden. Also diese Idee fallen gelassen. Eine andere Option war, nur @Field zu verwenden und das Place-Objekt als JSON-String zu senden. Hier

ist, was ich für die API-Schnittstelle hat:

@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); 

Und das ist, wie ich den Wert erstellt für facebook_place Feld geschickt werden:

Place place = ... 
Gson gson = new GsonBuilder().disableHtmlEscaping().create(); 
String placeJSON = gson.toJson(place); 
Verwandte Themen