1. ホーム
  2. java

[解決済み] Retrofit 2.0でHeaderを追加するためにインターセプターを使用するには?

2022-10-26 07:02:32

質問

私たちのチームは Retrofit 2.0 を採用することにしました。 を採用することを決定し、私はそれについていくつかの初期研究をしています。私はこのライブラリの初心者です。

私は、どのように interceptor を使ってカスタマイズされたヘッダを追加するにはどうしたらよいでしょうか。 レトロフィット 2.0 でカスタマイズされたヘッダを追加することができます。多くの チュートリアル を使用した interceptor を使ってヘッダを追加する方法を紹介していますが、最新版ではAPIが大きく変わったので、これらの方法を新しいバージョンでどのように適応させればいいのかわかりません。また、Retrofitはまだ新しいドキュメントを更新していません。

例えば、以下のコードでは、どのように Interceptor クラスをどのように実装すればよいのでしょうか?その上、正確には という文書化されていない Chain オブジェクト ? いつ intercept() が呼ばれるのでしょうか?

    OkHttpClient client = new OkHttpClient();
    client.interceptors().add(new Interceptor() {
        @Override
        public Response intercept(Chain chain) throws IOException {
            Response response = chain.proceed(chain.request());

            // How to add extra headers?

            return response;
        }
    });

    Retrofit retrofit = new Retrofit.Builder()
            .baseUrl(BASE_API_URL)
            .client(client)
            .addConverterFactory(GsonConverterFactory.create())
            .build();

どのように解決するのですか?

こちらをご覧ください。

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;
    }
}

コトリン

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()
        )        
    }
}