Okhttp3: Add global header to all requests 错误
Okhttp3: Add global header to all requests error
我想为我的所有请求定义一个全局 header。我正在使用 okhttp3。
我在论坛中搜索并找到了一种方法,我尝试实施该方法:
public static void main(String[] args) throws Exception {
OkHttpClient httpClient = new OkHttpClient();
httpClient.networkInterceptors().add(new Interceptor() {
public Response intercept(Chain chain) throws IOException {
Request request = chain.request().newBuilder()
.method("GET", null)
.addHeader("Accept", headerType)
.addHeader(headerAuthorization, headerAuthorizationValue)
.build();
return chain.proceed(request);
}
});
Request request = new Request.Builder()
.url(Connection.BASE_URL)
.build();
okhttp3.Response response = httpClient.newCall(request).execute();
String responseData = response.body().string();
System.out.println(responseData);
}
但是,我在执行过程中出错,我认为它与拦截器有关。异常情况如下:
Exception in thread "main" java.lang.UnsupportedOperationException
at java.base/java.util.Collections$UnmodifiableCollection.add(Collections.java:1062)
at jira.Program.main(Program.java:25)
有没有人看到我的错误是什么,可以帮助我吗?提前致谢!
你能不能尝试只使用拦截器而不是网络拦截器,因为网络拦截器有特殊用途,如重定向和重试。
根据文档
httpClient.networkInterceptors()
Returns an immutable list of interceptors that observe a single network request and response.
因为它是一个不可变的列表,所以你不能向它添加元素,即 java.lang.UnsupportedOperationException
被抛到 networkInterceptors().add(...)
编辑:
为了解决这个问题,请更换 new OkHttpClient();
与 new OkHttpClient.Builder().addInterceptor(...).build()
.
我想为我的所有请求定义一个全局 header。我正在使用 okhttp3。 我在论坛中搜索并找到了一种方法,我尝试实施该方法:
public static void main(String[] args) throws Exception {
OkHttpClient httpClient = new OkHttpClient();
httpClient.networkInterceptors().add(new Interceptor() {
public Response intercept(Chain chain) throws IOException {
Request request = chain.request().newBuilder()
.method("GET", null)
.addHeader("Accept", headerType)
.addHeader(headerAuthorization, headerAuthorizationValue)
.build();
return chain.proceed(request);
}
});
Request request = new Request.Builder()
.url(Connection.BASE_URL)
.build();
okhttp3.Response response = httpClient.newCall(request).execute();
String responseData = response.body().string();
System.out.println(responseData);
}
但是,我在执行过程中出错,我认为它与拦截器有关。异常情况如下:
Exception in thread "main" java.lang.UnsupportedOperationException
at java.base/java.util.Collections$UnmodifiableCollection.add(Collections.java:1062)
at jira.Program.main(Program.java:25)
有没有人看到我的错误是什么,可以帮助我吗?提前致谢!
你能不能尝试只使用拦截器而不是网络拦截器,因为网络拦截器有特殊用途,如重定向和重试。
根据文档
httpClient.networkInterceptors()
Returns an immutable list of interceptors that observe a single network request and response.
因为它是一个不可变的列表,所以你不能向它添加元素,即 java.lang.UnsupportedOperationException
被抛到 networkInterceptors().add(...)
编辑:
为了解决这个问题,请更换 new OkHttpClient();
与 new OkHttpClient.Builder().addInterceptor(...).build()
.