Reputation: 6522
I am using Retrofit with RequestInterceptor.
The problem is that every request that I send, has a different Header "Accept", so I need to change the "Accept" header with RequestInterceptor everytime I create a request.
So far I'm doing it like this:
private void updateApiMethodsFor(final String linkName) {
JacksonConverter jacksonConverter = new JacksonConverter();
RestAdapter restAdapter = new RestAdapter
.Builder()
.setLogLevel(RestAdapter.LogLevel.FULL)
.setEndpoint(ROOT_URL)
.setConverter(jacksonConverter)
.setRequestInterceptor(new RequestInterceptor() {
@Override
public void intercept(RequestFacade request) {
ApiIndexLink1 apiIndexLink = getIndexLinkForName(linkName);
if (apiIndexLink != null) {
request.addHeader("Accept", apiIndexLink.getContentTypes().getContentTypeList().get(1));
}
}
})
.build();
apiMethods = restAdapter.create(BCApiMethods.class);
}
The problem is that if I call this every time before I make a request, it is too expensive. Is there a better way to solve this?
Upvotes: 0
Views: 485
Reputation: 949
RequestInterceptor myRequestInterceptor = new RequestInterceptor() {
@Override
public void intercept(RequestFacade request) {
ApiIndexLink1 apiIndexLink = getIndexLinkForName(linkName);
if (apiIndexLink != null) {
request.addHeader("Accept", apiIndexLink.getContentTypes().getContentTypeList().get(1));
}
}
};
private void updateApiMethodsFor(final String linkName) {
JacksonConverter jacksonConverter = new JacksonConverter();
RestAdapter restAdapter = new RestAdapter
.Builder()
.setLogLevel(RestAdapter.LogLevel.FULL)
.setEndpoint(ROOT_URL)
.setConverter(jacksonConverter)
.setRequestInterceptor(myRequestInterceptor)
.build();
apiMethods = restAdapter.create(BCApiMethods.class);
}
Here, the bottleneck is creating a new interceptor every time. You can overcome that by having an interceptor variable
Upvotes: 1