Как добавить перехватчик HTTP в модификации в классе генератора услуг - PullRequest
0 голосов
/ 04 января 2019

Я создал отдельный класс генератора служб, как показано в этом руководстве. https://futurestud.io/tutorials/retrofit-2-manage-request-headers-in-okhttp-interceptor

ApiServiceGenerator.java

public class ApiServiceGenerator {
    private static final String BASE_URL = "http://192.168.0.205/hadia/api/";

    private static Retrofit.Builder builder =
            new Retrofit.Builder()
                    .baseUrl(BASE_URL)
                    .addConverterFactory(GsonConverterFactory.create());

    private static Retrofit retrofit = builder.build();

    private static OkHttpClient.Builder httpClient =
            new OkHttpClient.Builder();


    public static <S> S createService(
            Class<S> serviceClass) {

        return retrofit.create(serviceClass);
    }
}

Мне нужно добавить заголовок авторизации для каждого запроса, как мне это сделать?сделать это с помощью этого статического метода createService?

Вот как создать перехватчик для добавления заголовка к каждому запросу

httpClient.addInterceptor(new Interceptor() {  
    @Override
    public Response intercept(Interceptor.Chain chain) throws IOException {
        Request original = chain.request();

        // Request customization: add request headers
        Request.Builder requestBuilder = original.newBuilder()
                .header("Authorization", "auth-value"); // <-- this is the important line

        Request request = requestBuilder.build();
        return chain.proceed(request);
    }
});

Как добавить этот метод для добавления токена Bearer в каждый запрос?

Ответы [ 2 ]

0 голосов
/ 04 января 2019

У меня есть Creator класс, подобный этому

class Creator {
    public static Services newServices() {
        final HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor();
        interceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
        final OkHttpClient client = new OkHttpClient.Builder()
                .addInterceptor(interceptor)
                .build();

        final Retrofit retrofit = new Retrofit.Builder()
                .baseUrl(Services.HOST)
                .client(client)
                .addConverterFactory(GsonConverterFactory.create(GsonUtils.get()))
                .addCallAdapterFactory(RxJavaCallAdapterFactory.create())
                .build();
        return retrofit.create(Services.class);
    }
}
0 голосов
/ 04 января 2019

Вам необходимо использовать http-клиент, созданный при сборке модифицированного экземпляра.

Retrofit.Builder()
                .baseUrl(BASE_URL)
                .client(httpClient)  // This is the line
                .addConverterFactory(GsonConverterFactory.create());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...