如何在服务生成器类中添加http拦截器

Ane*_*ees 3 android retrofit retrofit2

我创建了一个单独的服务生成器类,如本指南所示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);
    }
}
Run Code Online (Sandbox Code Playgroud)

我需要为每个请求添加一个授权标头,如何使用这个静态 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);
    }
});
Run Code Online (Sandbox Code Playgroud)

如何添加此方法以向每个请求添加不记名令牌?

Han*_*ala 9

我有一堂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);
    }
}
Run Code Online (Sandbox Code Playgroud)