すべてのリクエスト( "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のバグですか?回避策はありますか?
ありがとう
文字 '{'と ' - >'を使用する構文に慣れていません。これは、以下のものと同等ですか? '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