J'essaie de définir un champ d'en-tête pour toutes mes demandes ("Content-Type: text/xml; charset = utf-8").Impossible de définir un champ d'en-tête global avec Retrofit 2.3.0
Pour l'instant, je spécifier dans mon interface Retrofit, au-dessus de chaque appel comme celui-ci:
@Headers("Content-Type: text/xml; charset=utf-8")
@POST("./")
Call<...> method(@Header("MyAction") String header, @Body ... envelop);
Il fonctionne, mais depuis toute ma part de demande le même type de contenu Je voudrais spécifiez ceci seulement une fois. De Retrofit's doc il peut être réalisé en utilisant un intercepteur comme celui-ci:
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();
Il ne fonctionne pas pour moi. Selon http3 Logging Interceptor, ma valeur d'en-tête est définie sur "Content-Type: application/xml; charset = utf-8", je ne sais pas pourquoi cette valeur en particulier.
J'ai rencontré beaucoup de sujets où ce problème a été rencontré mais je n'ai pas encore trouvé de réponse satisfaisante.
Comment puis-je spécifier ce champ d'en-tête une fois? Est-ce un bug dans Retrofit? Y a-t-il une solution de contournement?
Merci
Je ne connais pas la syntaxe en utilisant les caractères '{' et '->'. Est-il équivalent à: 'builder.addInterceptor (nouvel Interceptor() {@Overide Interception de la réponse publique (chaîne @NonNull Chain) throws IOException {Demande de requête = chain.request(). NewBuilder() .addHeader (" Content-Type ", "text/xml; jeu de caractères = UTF-8") .build(); return chaîne.proceed (requête);}}); '? Si oui, j'ai toujours le même problème. – Louis