2017-08-21 6 views
0

すべてのリクエスト( "Content-Type:text/xml; charset = utf-8")に対して特定のヘッダーフィールドを設定しようとしています。Retrofit 2.3.0でグローバルヘッダーフィールドを定義できません

今のところ、私はこのように各呼び出しの上に、私のレトロフィットインターフェイスでこれを指定しています:

@Headers("Content-Type: text/xml; charset=utf-8") 
@POST("./") 
Call<...> method(@Header("MyAction") String header, @Body ... envelop); 

それは動作しますが、すべて私の要求を共有するので、同じコンテンツタイプは、私がしたいと思いますこれは一度だけ指定してください。 Retrofit's docから が、それはこのようにインターセプタを使用して達成することができます:それは私のために働いていない

OkHttpClient.Builder httpClient = new OkHttpClient.Builder(); 
httpClient.addInterceptor(new Interceptor() { 
    @Override 
    public Response intercept(Interceptor.Chain chain) throws IOException { 
     Request original = chain.request(); 

     Request request = original.newBuilder() 
      .header("User-Agent", "Your-App-Name") 
      .header("Accept", "application/vnd.yourapi.v1.full+json") 
      .method(original.method(), original.body()) 
      .build(); 

     return chain.proceed(request); 
    } 
} 

OkHttpClient client = httpClient.build(); 
Retrofit retrofit = new Retrofit.Builder() 
    .baseUrl(API_BASE_URL) 
    .addConverterFactory(GsonConverterFactory.create()) 
    .client(client) 
    .build(); 

。 http3 Logging Interceptorによると、私のヘッダーの値は "Content-Type:application/xml; charset = utf-8"に設定されています。

私は、この問題が発生した多くのトピックを見つけましたが、まだ満足のいく回答は見つかりませんでした。

このヘッダーフィールドを1回指定するにはどうすればよいですか? Retrofitのバグですか?回避策はありますか?

ありがとう

答えて

0

私はヘッダーで同様の問題がありました。私の場合、私は2つのインターセプタを持っていました:

  1. ヘッダーを修正しました。
  2. ロギング用の
  3. (HttpLoggingInterceptor);

私はこのようにそれらを設定します。

OkHttpClient.Builder() 
      .addInterceptor(loggingInterceptor) 
      .addInterceptor { chain -> 
       /* edit headers */ 
       return chain.proceed(builder.build()) 
      } 
      .build() 

それは仕事をdidntの。私はちょうど方法(奇妙に聞こえるが、それは助けた)このような設定を切り替えるそれを解決するために:あなたはこのトリックを試して

OkHttpClient.Builder() 
      .addInterceptor { chain -> 
       /* edit headers */ 
       return chain.proceed(builder.build()) 
      } 
      .addInterceptor(loggingInterceptor) 
      .build() 

を、うまくいけばそれが役立ちます。

+0

文字 '{'と ' - >'を使用する構文に慣れていません。これは、以下のものと同等ですか? 'builder.addInterceptor(new Interceptor(){@Override public Response intercept(@NonNullチェーンチェーン)はIOException {request request = chain.request()。newBuilder().addHeader(" Content-Type " "text/xml; charset = UTF-8").build(); return chain.proceed(request);}}); '?もしそうなら、私はまったく同じ問題を抱えています。 – Louis

関連する問題