1. ホーム
  2. java

[解決済み] Android 後付けパラメータ付き @Headers

2023-05-06 09:49:50

質問

OAuthを使用しており、リクエストを行うたびにOAuthトークンをヘッダに入れる必要があります。私は @Header アノテーションがありますが、実行時に渡すことができるようにパラメータ化する方法はありますか?

以下はその概念です。

@Header({Authorization:'OAuth {var}', api_version={var} })

Runtimeで渡すことは可能ですか?

@GET("/users")
void getUsers(
    @Header("Authorization") String auth, 
    @Header("X-Api-Version") String version, 
    Callback<User> callback
)

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

Headerパラメータを使用する以外に、RequestInterceptorを使用すると、インターフェースを変更せずにすべてのリクエストを更新することができます。以下のような使い方をします。

RestAdapter.Builder builder = new RestAdapter.Builder()
    .setRequestInterceptor(new RequestInterceptor() {
        @Override
        public void intercept(RequestFacade request) {
            request.addHeader("Accept", "application/json;versions=1");
            if (isUserLoggedIn()) {
                request.addHeader("Authorization", getToken());
            }                    
        }
    });

p/s : Retrofit2を使っている場合は Interceptor の代わりに RequestInterceptor

から RequestInterceptor は Retrofit 2.0 では使えなくなりました。