2016-03-20 6 views
1

Ich habe eine Android-Anwendung, die als Client für meinen Back-End-Server fungiert.Was ist der richtige Weg, um Strings bei HTTP-Anfragen zu behandeln?

Ich mache eine POST HTTP-Anfrage mit Hilfe von Retrofit lib mit einem String im Körper.

Problem ist, ist Retrofit wahrscheinlich doppelte Anführungszeichen bei der Verwendung von GSON-Builder.

Das führt zu einem Feld in meiner DB mit doppelten Anführungszeichen, Beispiel: "example_gcm_token".

Ich muss wissen, ob ich das auf der Serverseite oder auf der Clientseite behandeln sollte und wie das geht.

Ich nehme an, dass es nicht auf der Serverseite sein sollte, da es bedeuten würde, dass ich für jeden einzelnen Endpunkt entfernte Anführungszeichen entfernen muss.

@POST ("/Maguss/users/{userId}/gcmtoken") 
    Call<Void> setGcmToken(@Path("userId") Long userId, @Body StringEntity gcmToken); 
+0

Deshalb ist die zurück json sieht tatsächlich so etwas wie: '' { "Irgendein Schlüssel": "\" example_gcm_token \ ""} "'? – Fred

+0

Ja, scheint wie –

+0

Dann weiß ich keine andere Möglichkeit, es entweder im Client oder im Backend zu entfernen. Ich denke immer noch, dass Logik wie diese im Backend sein sollte, aber das kann nur eine Frage des Geschmacks sein. Ich denke, dass das Backend immer irgendwie der einzige Punkt der Wahrheit sein sollte und wo alles aufgebaut wird. Es scheint auch so, als ob die Zitate nicht einmal in der Zeichenkette stehen sollten. – Fred

Antwort

0

Ich würde versuchen, die StringEntity mit einem POJO zu ersetzen:

public class SetGcmTokenRequest { 
    @SerializedName("gcmtoken") 
    private String gcmToken; 

    public String getGcmToken() { 
     return gcmToken; 
    } 

    public void setGcmToken(String gcmToken) { 
     this.gcmToken = gcmToken; 
    } 
} 

und ändern Sie die Schnittstelle wie folgt aus:

@POST ("/Maguss/users/{userId}/gcmtoken") 
Call<Void> setGcmToken(@Path("userId") Long userId, @Body SetGcmTokenRequest setGcmTokenRequest); 
+0

Ja, das würde es lösen, obwohl ich nicht glücklich bin, kann ich keine einfachen Strings senden, ohne mit Anführungszeichen umgehen zu müssen :) –

+0

Ich weiß, aber ich denke nicht, dass StringEntity als Körper unterstützt wird. Sie könnten HashMap verwenden, aber dann würde Ihr API-Client zu einem Ratespiel werden :) –

Verwandte Themen