How to use interceptor to add Headers in Retrofit 2.0? How to use interceptor to add Headers in Retrofit 2.0? java java

How to use interceptor to add Headers in Retrofit 2.0?


Check this out.

public class HeaderInterceptor implements Interceptor {    @Override    public Response intercept(Chain chain) throws IOException {        Request request = chain.request()                .newBuilder()                .addHeader("appid", "hello")                .addHeader("deviceplatform", "android")                .removeHeader("User-Agent")                .addHeader("User-Agent", "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:38.0) Gecko/20100101 Firefox/38.0")                .build();        Response response = chain.proceed(request);        return response;    }}

Kotlin

class HeaderInterceptor : Interceptor {    override fun intercept(chain: Interceptor.Chain): Response = chain.run {        proceed(            request()                .newBuilder()                .addHeader("appid", "hello")                .addHeader("deviceplatform", "android")                .removeHeader("User-Agent")                .addHeader("User-Agent", "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:38.0) Gecko/20100101 Firefox/38.0")                .build()        )            }}


Another alternative from the accepted answer

public class HeaderInterceptor implements Interceptor {    @Override    public Response intercept(Chain chain) throws IOException {        Request request = chain.request();        request = request.newBuilder()                .addHeader("headerKey0", "HeaderVal0")                .addHeader("headerKey0", "HeaderVal0--NotReplaced/NorUpdated") //new header added                .build();        //alternative        Headers moreHeaders = request.headers().newBuilder()                .add("headerKey1", "HeaderVal1")                .add("headerKey2", "HeaderVal2")                .set("headerKey2", "HeaderVal2--UpdatedHere") // existing header UPDATED if available, else added.                .add("headerKey3", "HeaderKey3")                .add("headerLine4 : headerLine4Val") //line with `:`, spaces doesn't matter.                .removeAll("headerKey3") //Oops, remove this.                .build();        request = request.newBuilder().headers(moreHeaders).build();        /* ##### List of headers ##### */        // headerKey0: HeaderVal0        // headerKey0: HeaderVal0--NotReplaced/NorUpdated        // headerKey1: HeaderVal1        // headerKey2: HeaderVal2--UpdatedHere        // headerLine4: headerLine4Val        Response response = chain.proceed(request);        return response;    }}


   public class ServiceFactory {      public static ApiClient createService(String authToken, String userName, String password) {            OkHttpClient defaultHttpClient = new OkHttpClient.Builder()                    .addInterceptor(                            chain -> {                                Request request = chain.request().newBuilder()                                        .headers(getJsonHeader(authToken))                                        .build();                                return chain.proceed(request);                            })                    .authenticator(getBasicAuthenticator(userName, password))                    .build();            return getService(defaultHttpClient);        }        private static Headers getJsonHeader(String authToken) {            Headers.Builder builder = new Headers.Builder();            builder.add("Content-Type", "application/json");            builder.add("Accept", "application/json");            if (authToken != null && !authToken.isEmpty()) {                builder.add("X-MY-Auth", authToken);            }            return builder.build();        }        private static Authenticator getBasicAuthenticator(final String userName, final String password) {            return (route, response) -> {                String credential = Credentials.basic(userName, password);                return response.request().newBuilder().header("Authorization", credential).build();            };        }          private static ApiClient getService(OkHttpClient defaultHttpClient) {            return new Retrofit.Builder()                    .baseUrl(BASE_URL)                    .addConverterFactory(GsonConverterFactory.create())                    .addCallAdapterFactory(RxJavaCallAdapterFactory.create())                    .client(defaultHttpClient)                    .build()                    .create(ApiClient.class);        }}