我有改造和自定义RequestInterceptor的问题。我正在尝试将内容类型的标头添加到我发出的每个请求中,所以我自定义了RequestInterceptor:
new RestAdapter.Builder().
setEndpoint(Configuration.BASE_ENDPOINT).
setRequestInterceptor(new RequestInterceptor() {
@Override
public void intercept(RequestFacade request) {
request.addHeader("Content-type", "application/json");
}
}).
build();
但是当我尝试调用某些API时会抛出 NullPointerException
。
我将问题追溯到RequestBuilder类到这一行:
headers.add(new Header("Content-Type", contentTypeHeader));
错误:
on line 344 : ArrayList headers is null.
你知道我做错了什么吗?我在其他项目中使用了这个确切的代码,它运行得很好。
由于
答案 0 :(得分:1)
看起来像是Retrofit中的一个错误。 RequestBuilder类中的标题列表是惰性初始化的,如果仅通过"Content-Type"
添加RequestInterceptor
标题,则标题列表不会被初始化。只要添加不同于"Content-Type"
的额外标头,此问题就会消失。 "Content-Type"
标头在代码中的处理方式不同,如果它是唯一提供此问题的标头。
如果"Content-Type"
是您要拦截的唯一标题,那么为了解决此问题,我只需使用@Headers("Content-type: application/json")
@注释您的界面,您就可以绕过它
@Headers("Content-type: application/json")
@GET("/some_resource_path")
Response getData();
我为它创建了一个问题here。