Okhttp3:需要帮助才能使用 HeaderInterceptor

Okhttp3: Need help to use HeaderInterceptor

我想对所有请求使用全局 header。因此我实现了以下 class:

public class HeaderInterceptor {

    public Response intercept(Chain chain) throws IOException {
        Request request = chain.request()
                .newBuilder()
                .method("GET", null)
                .addHeader("Accept", "application/json")
                .addHeader("Basic ", "abcdefghi123456789")
                .build();
        Response response = chain.proceed(request);
        return response;
    }

}

现在我想在 main() 方法中执行以下操作:

 public static void main(String[] args) throws Exception {

        OkHttpClient httpClient = new OkHttpClient.Builder().addInterceptor(MyInterceptor).build();

        Request reqAllProjects = new Request.Builder()
                .url("https://example.com/projects")
                .build();

        Response resAllProjects = httpClient.newCall(reqAllProjects).execute();

        String responseData = resAllProjects.body().string();

        System.out.println(responseData);

 }

我现在不确定如何使用我的 HeaderInterceptor。我想我必须在这里输入它,对吗? OkHttpClient httpClient = new OkHttpClient.Builder().addInterceptor(??MyInterceptor??).build(); 我尝试过这样的事情:addInterceptor(HeaderInterceptor.intercept()) 但这不起作用...

有人可以帮我吗?其余的看起来还好吗?非常感谢!

你检查过这个问题了吗:

应该是这样的 .addInterceptor(新拦截器())

您创建的拦截器 class 似乎没有实现 Interceptor 接口。您需要按如下方式实现

public class HeaderInterceptor implements Interceptor {

    @Override
    public Response intercept(Interceptor.Chain chain) throws IOException {
        Request request = chain.request()
                .newBuilder()
                .addHeader("Accept", "application/json")
                .addHeader("Basic ", "abcdefghi123456789")
                .build();
        Response response = chain.proceed(request);
        return response;
    }  
}

请注意,您不应该将请求的方法和正文修改为.method("GET", null),除非您确实需要这样做,因为它会导致所有 HTTP客户端发出的 GET 请求为 null body 的请求。

然后在构建客户端时添加拦截器,如下所示

    OkHttpClient httpClient = new OkHttpClient.Builder()
                 .addInterceptor(new HeaderInterceptor()).build();

查看 OkHttp documentation 了解更多信息。