Guy
Guy

Reputation: 6522

Retrofit change RequestInterceptor

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

Answers (1)

Nick
Nick

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

Related Questions