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

使用Kotlin Retrofit调用Spotify API获取新专辑返回空字段问题

解决Spotify new-releases接口返回字段全为null的问题

核心原因:数据类结构与API响应不匹配

Spotify的new-releases接口返回的JSON结构外层包含一个albums对象,你的Albums数据类直接对应了albums内部的字段,但没有处理外层的包裹结构,导致序列化时无法匹配到数据,所有字段返回null。

具体修复步骤

1. 修正数据类结构

新增一个外层响应类,用来匹配API返回的完整结构:

@kotlinx.serialization.Serializable
data class NewReleasesResponse(
    val albums: Albums
)

@kotlinx.serialization.Serializable
data class Albums(
    val limit: Int,
    val next: String?, // 注意:next/previous可能为null,建议设为可空类型
    val previous: String?,
    val total: Int,
    val items: List<Album> 
)

// 确保Album数据类字段与Spotify返回的专辑结构匹配,示例:
@kotlinx.serialization.Serializable
data class Album(
    val id: String,
    val name: String,
    val artists: List<Artist>,
    // 其他需要的字段
)

@kotlinx.serialization.Serializable
data class Artist(
    val id: String,
    val name: String
)

2. 更新Retrofit接口返回类型

将getAlbums方法的返回类型改为新的外层响应类:

interface SpotifyApiService {

@GET("browse/new-releases")
suspend fun getAlbums(
    @Query("limit") limit: Int,
    @Header("Authorization") authorization: String
): NewReleasesResponse

// 获取授权令牌的接口保持不变
@POST("api/token")
@FormUrlEncoded
suspend fun getToken(
    @Header("Authorization") auth: String,
    @Header("Content-Type") content: String,
    @Field("grant_type") grantType: String
): TokenResponse
}

3. 验证序列化配置与授权头

  • 确保Retrofit已正确配置kotlinx.serialization转换器:
val json = Json { ignoreUnknownKeys = true } // 忽略API返回中未定义的字段,避免序列化失败
val retrofit = Retrofit.Builder()
    .baseUrl("https://api.spotify.com/v1/")
    .addConverterFactory(json.asConverterFactory("application/json".toMediaType()))
    .build()
  • 确认授权头格式正确:传入的authorization参数必须是"Bearer ${获取到的token}",不能只传token字符串。

4. 调试建议

可以先通过Postman或curl调用接口,确认返回的JSON结构,再对比数据类字段是否完全匹配,尤其是字段名和可空性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 10:12:26