Um Root-URL setzen Sie diese Methode verwenden können, die Zeichenfolge mit einer konstanten
@Rest(rootUrl = "http://company.com/ajax/services", converters = { MappingJackson2HttpMessageConverter.class }, interceptors = MyAuthInterceptor.class)
public interface MyRestClient {
@Get("/events")
EventList getEvents();
}
Hinweis ersetzt, dass wir ein Abfangjäger in den Argumenten der @Rest Anmerkung gesetzt. So eine Klasse wie folgt erstellen:
@EBean(scope = Scope.Singleton)
public class MyAuthInterceptor implements ClientHttpRequestInterceptor {
@Bean
MyAuthStore authStore;
public ClientHttpResponse intercept(HttpRequest request, byte[] body, ClientHttpRequestExecution execution) throws IOException {
HttpHeaders headers = request.getHeaders();
HttpAuthentication auth = new HttpBasicAuthentication(authStore.getUsername(), authStore.getPassword());
headers.setAuthorization(auth);
return execution.execute(request, body);
}
}
Nun, bevor Anfrage MyAuthInterceptor.intercept Ausführung() aufgerufen wird und Sie Ihre Authentifizierungsdaten festlegen können, wie Sie
In Ihrem Haupt build.gradle Datei bevorzugen, können Sie hinzufügen innerhalb von android-Elemente
productFlavors {
development {
buildConfigField "String", "SERVICE_URL_BASE", "\"dev.xxx.com/rest\""
}
test {
buildConfigField "String", "SERVICE_URL_BASE", "\"test.xxx.com/rest\""
}
production {
buildConfigField "String", "SERVICE_URL_BASE", "\"production.xxx.com/rest\""
}
}
Dann in Ihrer @Rest Anmerkung können Sie diesen Code verwenden, um aktuellen Geschmack Wert zu erhalten:
@Rest(rootUrl = "https://" + BuildConfig.SERVICE_URL_BASE)
Jetzt können Sie auswählen, welche Build-Variante verwendet werden soll (variant = flavor + buildType), um den gewünschten Wert zu verwenden. Um die Variante auszuwählen, können Sie die entsprechende Ansicht verwenden, sie soll auf der linken Seite des Android-Studios anwesend sein.
Diese Technik ist nützlich zu vermeiden Geschmack des Paketbaum zu schaffen nur verschiedene variabiles verwenden
Vielen Dank für Antwort, wie würde ich 'R.string.whiteLabelApiBaseHost' in' @ Rest' verwenden? Kann ich rootUrl innerhalb des Interceptors setzen? – simo
Ich glaube nicht, dass Sie rootUrl im Interceptor setzen können, sicherlich nicht leicht. Warum brauchst du das? Vielleicht kannst du es auf andere Weise lösen. und warum müssen Sie rootUrl von String-Ressourcen abrufen? Wenn Sie verschiedene URLs basierend auf der Umgebung verwenden müssen, schlage ich vor, Variablen für die Erstellung von Variablen zu verwenden. – firegloves
Können Sie ein Beispiel für die Verwendung der Gradle-Build-Variable schreiben, um RootUrl basierend auf der Umgebung auf "@Rest" zu setzen? – simo