无法在API Client中添加Bearer Token的技术求助
问题:API请求中Bearer Token未成功添加
尝试在API请求的Header中加入Bearer Token,但Token并未出现在实际请求里,相关代码及请求截图如下:
原代码
object APIClient { val client: ApiInterface get() { val httpLoggingInterceptor = HttpLoggingInterceptor().setLevel(HttpLoggingInterceptor.Level.BODY) val okHttpClient = OkHttpClient.Builder() .addInterceptor { chain - val request = chain.request().newBuilder() .addHeader("Authorization", "Bearer ${getString(TOKEN, "")}") .build() chain.proceed(request) } .addInterceptor(httpLoggingInterceptor) .build() val retrofit: Retrofit = retrofit2.Retrofit.Builder() .baseUrl(Constants.BASE_URL) .addConverterFactory(GsonConverterFactory.create()) .client(okHttpClient) .build() return retrofit.create(ApiInterface::class.java) } }
请求截图

问题排查与修复
1. 修复拦截器语法错误
代码中拦截器的lambda表达式存在语法错误:chain - 需改为 chain ->。这个错误会导致拦截器逻辑无法正常编译执行,自然不会添加Authorization Header。
2. 确保Token获取逻辑有效
getString(TOKEN, "") 需要确认是从正确的存储实例(比如SharedPreferences)中获取,且TOKEN对应的键存在有效的Token值。如果返回空字符串,会生成无效的Bearer Header,等同于未添加。
修复后的完整代码
object APIClient { // 根据实际场景实现Token获取逻辑,示例为Android SharedPreferences private fun getValidToken(): String { // 替换为你的SharedPreferences实例获取代码 val sharedPref = /* Context.getSharedPreferences("your_pref_name", Context.MODE_PRIVATE) */ return sharedPref.getString(TOKEN, "") ?: "" } val client: ApiInterface get() { val httpLoggingInterceptor = HttpLoggingInterceptor().setLevel(HttpLoggingInterceptor.Level.BODY) val okHttpClient = OkHttpClient.Builder() .addInterceptor { chain -> // 修复lambda语法 val token = getValidToken() val requestBuilder = chain.request().newBuilder() // 仅当Token非空时添加Header if (token.isNotEmpty()) { requestBuilder.addHeader("Authorization", "Bearer $token") } chain.proceed(requestBuilder.build()) } .addInterceptor(httpLoggingInterceptor) .build() val retrofit = Retrofit.Builder() .baseUrl(Constants.BASE_URL) .addConverterFactory(GsonConverterFactory.create()) .client(okHttpClient) .build() return retrofit.create(ApiInterface::class.java) } }
额外检查点
- 打印
getValidToken()的返回值,确认Token确实存在且不为空。 - 确认拦截器执行顺序:当前先添加Header拦截器、再添加Logging拦截器,日志会正确输出带Header的请求。
- 检查是否有其他拦截器修改或覆盖了Authorization Header。
内容的提问来源于stack exchange,提问作者Techno World
相关产品推荐
相关产品推荐

