In der Dokumentation von Retrofit 2 heißt es:
Header, die zu jeder Anforderung hinzugefügt werden müssen, können mithilfe eines OkHttp-Interceptors angegeben werden.
Dies kann problemlos mit der vorherigen Version durchgeführt werden. Hier ist die zugehörige Qualitätssicherung.
Aber der Einsatz von Retrofit - 2, kann ich nicht so etwas wie finden setRequestInterceptor
oder setInterceptor
Verfahren, die angewandt werden kann Retrofit.Builder
Objekt.
Es scheint auch, dass es RequestInterceptor
in OkHttp keine mehr gibt. Retrofits Dokument verweist uns auf Interceptor, dass ich nicht ganz verstanden habe, wie man es für diesen Zweck verwendet.
Wie kann ich das machen?
enqueue
die Standardheader nicht angezeigt.new OkHttpClient.Builder()
stattdessen seinnew OkHttpClient()
Die neueste Nachrüstversion gibt es HIER -> 2.1.0.
Lambda-Version:
hässliche lange Version:
Vollversion:
Gradle-Datei (Sie müssen den Protokollierungs-Interceptor hinzufügen, wenn Sie ihn verwenden möchten):
quelle
Zum Protokollieren Ihrer Anfrage und Antwort benötigen Sie einen Interceptor und zum Festlegen des Headers benötigen Sie einen Interceptor. Hier ist die Lösung, um beide Interceptor mithilfe von Retrofit 2.1 gleichzeitig hinzuzufügen
Fügen Sie nun in Ihrem Nachrüstobjekt diesen Header im Client hinzu
quelle
Versuchen Sie diesen Headertyp für Retrofit 1.9 und 2.0. Für Json-Inhaltstyp.
Sie können viel mehr Überschriften hinzufügen, z
Dynamisch zu Headern hinzufügen:
Nennen Sie Methode dh
Oder
Möchten Sie jedes Mal übergeben, dann erstellen Sie ein HttpClient-Objekt mit http Interceptor:
Dann zum Nachrüstobjekt hinzufügen
UPDATE Wenn Sie Kotlin verwenden, entfernen Sie das,
{ }
sonst funktioniert es nichtquelle
In meinem Fall
addInterceptor()
funktionierte es nicht, HTTP-Header zu meiner Anfrage hinzuzufügen, ich musste verwendenaddNetworkInterceptor()
. Der Code lautet wie folgt:Und der Abfangcode:
Dies und weitere Beispiele zu diesem Kern
quelle
Wenn Sie die addInterceptor-Methode zum Hinzufügen von HttpLoggingInterceptor verwenden, werden nicht die Dinge protokolliert, die von anderen Interceptors hinzugefügt wurden, die später als HttpLoggingInterceptor angewendet wurden.
Beispiel: Wenn Sie zwei Interceptors "HttpLoggingInterceptor" und "AuthInterceptor" und HttpLoggingInterceptor zuerst angewendet haben, können Sie die von AuthInterceptor festgelegten http-Parameter oder Header nicht anzeigen.
Ich habe es mithilfe der addNetworkInterceptor-Methode gelöst.
quelle
HttpLoggingInterceptor
als letzter Interceptor hinzufügen , um die endgültige Anforderung anzuzeigen.Verwenden Sie diesen Retrofit-Client
Ich gebe das JWT zusammen mit jeder Anfrage weiter. Bitte beachten Sie die Variablennamen nicht, es ist etwas verwirrend.
quelle
In Kotlin sieht das Hinzufügen von Interceptor folgendermaßen aus:
quelle
Mit der in kotlin geschriebenen RetrofitHelper- Bibliothek können Sie API-Aufrufe mit wenigen Codezeilen durchführen.
Fügen Sie Ihrer Anwendungsklasse folgende Header hinzu:
Und dann rufen Sie an:
Weitere Informationen finden Sie in der Dokumentation
quelle
Kotlin-Version wäre
quelle