Retrofit-Pfad Ersatz: Ersatz über den ganzen Pfad (einschließlich /)
In meinem setup, habe ich alle Pfade für meine Ressourcen aus der REST-API aus einem ersten Aufruf der API. Wir verwenden dieses Muster, um in der Lage sein zu ändern die Ressource-Pfade, ohne zu brechen alle vorhandenen app-Versionen in den Prozess.
Ich habe das Spiel mit Retrofit und ich versuchte eine Methode, die Sie akzeptieren würde jeder Pfad, den ich gehe, um es als string. Mein Versuch sieht wie folgt aus
@GET("/{path}")
public FooBar getFooBar(@Path("path") String path);
Ich versuche dann, rufen Sie es wie folgt.
String path = "foo/bar";
api.getFooBar(path);
Leider Retrofit-URL-Codiert den Pfad Ersatz und ich am Ende eine Anfrage an /foo%2Fbar
statt /foo/bar
. Gibt es eine Möglichkeit zum deaktivieren der URL-Kodierung für die Pfad Ersetzungen oder Ersetzungen, die sich über mehrere Segmente? Leider weiß ich nicht einmal wissen, wie viele Segmente es gibt, es ist alles geregelt, der von der API.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Verwenden
@EncodedPath
! Das ist es. Ich werde kopieren Sie die Javadoc-also diese Antwort hat mehr Fleisch:Verwenden Sie es wie diese:
@EncodedPath
ist veraltet jetzt.@Path
und eine Ihrer Fahnen.@EncodedPath
war veraltet. Verwenden@Path(value = "link", encode = false) String link
Da @EncodedPath ist veraltet jetzt
Retrofit 1.9:
Retrofit-2.*:
Gibt es bekannte bugs, und Sie können sehen, dass der bugreport auf:
Retrofit @Github
Dort ist auch ein link zu den möglichen Lösungen: Lösung @Github
Am Ende, die Nachricht aus dem retrofit-Entwickler ist:
"Pfad Ersetzungen, die sich über mehrere Segmente werden nicht unterstützt, sollten Sie auf die Verwendung von @ - Url zu bauen, die volle relativen URL-programmgesteuert, wenn die Anzahl der Segmente variiert dynamisch."
So, wenn Sie in Schwierigkeiten sind, mit encode, die Lösung kann sein:
Ihre API für BEKOMMEN:
Ihre API für die POST:
Und rufen Sie es mit diesem:
So mit das Sie nicht haben, das problem zu codieren etwas.
Aber wenn Sie sind gerade auf der Suche nach der normalen Kodierung in der version 2.* die API muss auch so sein:
Hinsichtlich
Ich vor gleichen Problem und lösen es, wie unten code
Getestet und Ihre Arbeitsweise.
Lösung ist, fügen Sie einfach codiert = true, um sicherzustellen, dass die Richtige url ist der hit.
eg: