В Retrofit
нет определенного API для реализации этого поведения, потому что Retrofit использует OkHttp
для обработки сетевых операций. Но вы могли бы добиться этого, внедрив интерфейс Authenticator
клиента OkHttp
, который вы передаете конструктору Retrofit. OkHttp
вызов Authenticator
для credentials
, когда код ответа 401
несанкционированная ошибка, а затем повторная попытка вызова неудачного запроса. Вы можете реализовать Authenticator
следующим образом:
public class TokenAuthenticator implements Authenticator {
ApiService apiService;
TokenAuthenticator(ApiService apiService){
this.apiService = apiService;
}
@Override
public Request authenticate(Route route, Response response) throws IOException {
// Refresh your token using a synchronous request
String newToken = apiService.refreshToken().execute().body();
// Add new token to the failed request header and retry it
return response.request().newBuilder()
.header("Authorization", newToken)
.build();
}
}
И затем передать TokenAuthenticator
OkHttpClient
следующим образом:
OkHttpClient okHttpClient = new OkHttpClient().newBuilder()
.authenticator(new TokenAuthenticator(apiService))
.build();
И, наконец, передать клиент OkHttpClient Модифицированный строитель:
Retrofit retrofit = new Retrofit.Builder()
.client(okHttpClient)
.baseUrl(BuildConfig.API_BASE_URL)
.build();