前言
有些接口需要单独设置header参数 作为标记
如何灵活 或者统一设置请求header呢
注解@Headers
顾名思义 @Headers
是指多个header 放在对象里 统一管理
//获取xxx
@Headers({"Content-Type: application/json",
"User-Agent: test"})
@POST("xxxx")
Observable<BaseResult> getObj(@Body Map<String, String> map);
拦截器 Interceptor
如果使用代码的方式,则需要添加头部拦截器
需要注意的是这里是统一拦截 一般指固定的头部参数
根据业务来判断
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("Content-Type", "application/json")
.header("User-Agent", "test")
.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();
注解 @Header
@Header
指单个header 添加单个头部 动态 可灵活配置
适用于个别接口 有要求的上传参数
下面这个认证接口 后台要求传一个加密的key 而其他接口不需要
所以用@Header
最为方便
//认证接口
@Headers({"Content-Type: application/json"})
@POST("isp/app/worker/auth")
Observable<BaseResult> auth(@Header("key") String encodeStr,
@Body Map<String, String> map);