Есть несколько способов справиться с этим.Позвольте мне показать вам
1.Использование HeaderMap Модернизация фактически позволяет посылать произвольное количество заголовков.Это может быть достигнуто с помощью @HeaderMap
.
@Headers({"Accept: text/csv", "Content-Type: application/json"})
@POST(CHECKIN_DATA_SCANNER)
Call<CheckIn> sendCheckinDataRequest(
@Body JSONObject locationPost,
@HeaderMap Map<String, String> headers);
, который можно назвать как:
Map<String, String> headers = HashMap<>();
// Populate map with headers
service.sendCheckinDataRequest(mRawJson, headers);
2.Использование отдельных параметров Если у вас есть только несколько динамических заголовков, то вы можете просто использовать обычные параметры:
@Headers({"Accept: text/csv", "Content-Type: application/json"})
@POST(CHECKIN_DATA_SCANNER)
Call<CheckIn> sendCheckinDataRequest(
@Body JSONObject locationPost,
@Header("x-api-key") String apiKey,
@Header("x-session-key") String sessionKey);
Можно назвать так:
service.sendCheckinDataRequest(mRawJson, apiKey, sessionKey);
3.Использование перехватчиков Если вы хотите использовать эти заголовки для всех запросов, то, возможно, проще всего использовать перехватчик:
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("x-api-key", <apiKey>)
.header("x-session-key", <sessionKey>)
.method(original.method(), original.body())
.build();
return chain.proceed(request);
}
}
Используйте этот клиент okhttp
с Retrofit, и к каждому запросу будут добавлены заголовки.