Rénovation de 2 manière Élégante d'ajouter des en-têtes au niveau de l'api

Mon Rénovation 2 (2.0.2 actuellement) le client a besoin d'ajouter des en-têtes personnalisés à la demande.

Je suis en utilisant un Interceptor pour ajouter ces en-têtes à toutes les demandes:

OkHttpClient httpClient = new OkHttpClient();
httpClient.networkInterceptors().add(new Interceptor() {
    @Override
    public Response intercept(Chain chain) throws IOException {
        final Request request = chain.request().newBuilder()
                .addHeader("CUSTOM_HEADER_NAME_1", "CUSTOM_HEADER_VALUE_1")
                .addHeader("CUSTOM_HEADER_NAME_2", "CUSTOM_HEADER_VALUE_2")
                ...
                .addHeader("CUSTOM_HEADER_NAME_N", "CUSTOM_HEADER_VALUE_N")
                .build();

        return chain.proceed(request);
    }
});


Retrofit retrofitClient = new Retrofit.Builder()
        .baseUrl(baseUrl)
        .client(httpClient)
        .build();

Certains en-têtes j'ai toujours envie d'ajouter, mais certains en-têtes que j'ai seulement besoin d'ajouter basant sur les exigences propres à un point de terminaison, par exemple si l'utilisateur doit être authentifié ou non.

J'aimerais avoir la capacité de contrôle au niveau de l'api, par exemple à l'aide d'une annotation, quelque chose comme:

public interface MyApi {
    @NO_AUTH
    @POST("register")
    Call<RegisterResponse> register(@Body RegisterRequest data);

    @GET("user/{userId}")
    Call<GetUserResponse> getUser(@Path("userId") String userId);
}

Lors de l'envoi d'une demande de register il n'y a pas besoin d'ajouter le jeton d'authentification, mais les demandes qui n'ont pas la @NO_AUTH annotation aura le jeton d'en-tête.

De ce que je comprends de Rénovation 2 ne prend pas en charge personnalisée des annotations, et alors que je trouve cette solution de contournement pour Personnalisé avec Annotations de Rénovation 2, il semble un peu trop.

Je voudrais éviter la nécessité de transmettre ces en-têtes par demande, comme:

public interface MyApi {
    @POST("register")
    Call<RegisterResponse> register(@Body RegisterRequest data);

    @GET("user/{userId}")
    Call<GetUserResponse> getUser(@Header("AuthToken") String token, @Path("userId") String userId);
}

Il se sent juste redondant de le faire chaque fois que j'appelle la méthode au lieu de le faire dans l'intercepteur (depuis que j'ai accès à l'en-tête de valeurs statique).
J'ai juste un peu besoin de savoir dans mon Interceptor.intercept mise en œuvre de savoir si ou non de cette demande spécifique doit avoir un en-tête spécifique(s).

Aucune idée de comment je peux faire ce travail?
Je préfère une solution générique et pas seulement pour l'auth jeton cas, mais une solution spécifique est la bienvenue.
Grâce

OriginalL'auteur Nitzan Tomer | 2016-06-10