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

Rus*_*hal 4 java android retrofit okhttp retrofit2

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

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

我的代码:

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();
Run Code Online (Sandbox Code Playgroud)

接口:

@GET("driver/v1/driver")
Call<Driver> getAuthorizedDriver();
Run Code Online (Sandbox Code Playgroud)

不同的变体抛出401错误,不知道该怎么办Log:

I/Response code: 401
I/Response message: Unauthorized`
Run Code Online (Sandbox Code Playgroud)

Rus*_*hal 8

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

@GET("driver/v1/driver")
Call<Driver> getAuthorizedDriver(@Header("authorization") String auth);
Run Code Online (Sandbox Code Playgroud)

和身份验证:

Call<Driver> call = apiInterface.getAuthorizedDriver("Token token=" + token + ", driver_id=" + id);
Run Code Online (Sandbox Code Playgroud)

  • 好的,如果有效的话:对你来说太好了。但有一点小小的批评。下次请提供正确的 api 文档。您提供的参数建议您需要 2 个参数,而不是由两个值组合而成的参数。无论如何:祝你有美好的一天,然后继续编码:) (2认同)

Mal*_*lik 5

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

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

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