java 改造添加带有令牌和 ID 的标头

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/41514375/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-11-03 05:56:19  来源:igfitidea点击:

Retrofit add header with token and id

javaandroidretrofitretrofit2okhttp

提问by Ruslan Myhal

I have a problem with getting authenticated user. Before it I got token and user id. Now i need to get user from server using access token and id. I have header format

我在获取经过身份验证的用户时遇到问题。在此之前,我获得了令牌和用户 ID。现在我需要使用访问令牌和 ID 从服务器获取用户。 我有标题格式

Now I'am trying to add header with user token and id using interceptor.

现在我正在尝试使用拦截器添加带有用户令牌和 id 的标头。

My code:

我的代码:

Interceptor interceptor = new Interceptor() {
        @Override
        public okhttp3.Response intercept(Chain chain) throws IOException {
            Request newRequest = chain.request().newBuilder()
                    .addHeader("Accept", "application/json")
                    .addHeader("authorization", token) <-??
                    .addHeader("driver_id", id) <-??
                    .build();
            return chain.proceed(newRequest);
        }
    };
    OkHttpClient.Builder okHttpBuilder = new OkHttpClient.Builder();
    okHttpBuilder.addInterceptor(interceptor);
    OkHttpClient okHttpClient = okHttpBuilder.build();

    Retrofit retrofit = new Retrofit.Builder()
            .baseUrl(BASE_URL)
            .addConverterFactory(GsonConverterFactory.create())
            .client(okHttpClient)
            .build();

Interface:

界面:

@GET("driver/v1/driver")
Call<Driver> getAuthorizedDriver();

Different variants throws 401 error, don't know what to do Log:

不同的变种抛出401错误,不知道怎么办日志:

I/Response?code: 401
I/Response?message: Unauthorized`

回答by Ruslan Myhal

I got it. It's must look like:

我知道了。它必须看起来像:

@GET("driver/v1/driver")
Call<Driver> getAuthorizedDriver(@Header("authorization") String auth);

And auth:

和授权:

Call<Driver> call = apiInterface.getAuthorizedDriver("Token token=" + token + ", driver_id=" + id);

回答by Malik

Try to pass the header values via the method call:

尝试通过方法调用传递标头值:

@GET("driver/v1/driver")
Call<Driver> getAuthorizedDriver(@Header("authorization") String token,
                                 @Header("driver_id") Integer id);

You also wouldn't have to deal with this huge chunk of Interceptor code

您也不必处理这么大的拦截器代码