Verhindern, dass die Nachrüstung von der Codierung meine http-request-body
Ich bin versucht, übergeben Sie eine Zeichenfolge mit dem folgenden format wie der Körper einer http-post-Anfrage.
param1=PARAM1¶m2=PARAM2¶m3=PARAM3
Aber nachrüsten kodiert meinen Körper, so dass = wird \u003d und & wird \u0026. Und ich am Ende mit einer Zeichenfolge, die sieht eigentlich so aus:
param1\u003dPARAM1\u0026param2\u003dPARAM2\u0026param3\u003dPARAM3
Wie kann ich das verhindern?
Meine retrofit-rest-api ist wie folgt definiert.
public interface RestAPI {
@POST("/oauth/token")
public void getAccessToken(@Body String requestBody, Callback<Response> response);
}
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die Frage zu beantworten, können Sie direkt verwenden
TypedString
wie die parameter der Methode geben. Der Grund, der Wert wird geändert, weil die Nachrüstung ist die übergabe derString
zu Gson, um als JSON Kodieren. MitTypedString
oder jedeTypedOutput
Unterklasse wird verhindern, dass dieses Verhalten im Grunde sagen Retrofit-Sie behandeln die Erstellung der direkte Anfrage Körper selbst.Jedoch, dass das format der payload genannt, form der URL-Kodierung. Retrofit bietet systemeigene Unterstützung für Sie. Ihre Methode Erklärung sollte eigentlich so Aussehen:
Wenn Sie eine serialisierte Klasse (wie eine HashMap) in den request-body und Sie verhindern möchten, dass die Codierung, die (wie in vezikon und mein problem), können Sie erstellen eine benutzerdefinierte Gson mit Behinderten-escaping verwenden:
Übergeben Sie diesen Konverter, um Ihre rest-adapter:
Diese Weise wird das " = " - Zeichen in den post-body bleiben intakt, während die Vorlage.
Mit Kotlin
Für Retrofit-2 können Sie initialisieren die Nachrüstung mit einem Gson converter factory.
Dieser generator sollte entfernen Sie die Flucht aus Ihrer json-Ausgabe.
Gradle-Datei-Abhängigkeiten:
implementation 'com.squareup.retrofit2:converter-scalars:2.1.0'
Ich habe die Highsider auf meine Antwort.Dieses Problem kann behoben werden, mit unten Abhilfe.
Hinweis : verwenden Sie nicht "@FormUrlEncoded" für diesen Fall.
Verweis-Hier - https://github.com/square/retrofit/issues/1407