有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java改装添加带有令牌和id的标头

我在获取经过身份验证的用户时遇到问题。在此之前,我获得了令牌和用户id。现在,我需要使用访问令牌和id从服务器获取用户。 I have header format

现在我正在尝试使用拦截器添加带有用户令牌和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();

接口:

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

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

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

共 (2) 个答案

  1. # 1 楼答案

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

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

    你也不必处理这么多拦截代码

  2. # 2 楼答案

    我明白了。 它必须看起来像:

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

    和auth:

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