You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Retrofit调用Rapid API报错:Expected BEGIN_ARRAY but was STRING求助

Retrofit调用Rapid API报错:Expected BEGIN_ARRAY but was STRING的排查与解决

你遇到的报错Expected BEGIN_ARRAY but was STRING at line 1 column 1 path $,核心原因是Retrofit发送的请求与Postman不一致,导致API返回的不是预期的JSON数组,而是字符串(比如错误信息)。以下是具体排查和修复步骤:

1. 修正API接口的@GET注解写法

你的接口代码中,@GET("on={kanji}")的写法错误,把查询参数当成了路径参数处理。Postman中你应该是用?on=shin作为查询参数发送请求,但Retrofit里的错误写法会生成错误的URL,导致API返回非预期内容。

错误的接口代码:

interface RapidService {    
    @Headers("rapidapi-key:xxxxxxxxxxxxxxx")    
    @GET("on={kanji}")    
    suspend fun getKanji(@Path("kanji")kanji:String): Response<List<PojoKanjiItem>>
}

修复后的接口代码:

interface RapidService {    
    @Headers("rapidapi-key:xxxxxxxxxxxxxxx")    
    @GET
    suspend fun getKanji(@Query("on") kanji: String): Response<List<PojoKanjiItem>>
}

解释:@Query("on")会自动在URL末尾拼接?on=shin,生成正确的请求地址,和Postman的请求一致。

2. 验证请求URL是否正确

可以添加OkHttp日志拦截器,查看实际发送的请求URL和响应内容,确认与Postman一致:

// 需先在build.gradle添加依赖:implementation 'com.squareup.okhttp3:logging-interceptor:4.12.0'
val okHttpClient = OkHttpClient.Builder()
    .addInterceptor(HttpLoggingInterceptor().setLevel(HttpLoggingInterceptor.Level.BODY))
    .build()

val retrofit = Retrofit.Builder()
    .client(okHttpClient)
    .addConverterFactory(GsonConverterFactory.create()) // 排查阶段建议去掉setLenient(),严格校验格式
    .baseUrl("https://app.kanjialive.com/api/public/search/advanced/")
    .build()

添加后,Logcat会输出完整的请求URL、请求头和响应体,方便快速定位问题。

3. 其他检查点

  • 确认rapidapi-key与Postman中使用的完全一致,密钥错误会导致API返回错误字符串。
  • 暂时移除GsonBuilder().setLenient(),宽松模式会掩盖格式问题,确保请求正确后再考虑是否启用。

内容的提问来源于stack exchange,提问作者Bradboyee

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 19:54:38