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

使用Apollo Kotlin时,如何从ApolloResponse获取HTTP状态码?

获取Apollo Kotlin中ApolloResponse的HTTP状态码

在Apollo Kotlin 3.x及以上版本中,ApolloResponse不会直接暴露HTTP状态码,但你可以通过其metadata属性获取包含状态码的HttpResponseInfo对象,具体操作如下:

  • 执行查询后,从响应的metadata中查找HttpResponseInfo实例
  • 从该实例中提取状态码,进而判断是否为206并处理部分结果

代码示例(同步调用)

import com.apollographql.apollo3.api.http.HttpResponseInfo

val apolloClient = ApolloClient.Builder()
    .serverUrl("your-graphql-endpoint")
    .build()

val response = apolloClient.query(YourGraphQLQuery()).execute()

// 获取HTTP响应元数据
val httpResponseInfo = response.metadata.find<HttpResponseInfo>()
httpResponseInfo?.let {
    val statusCode = it.statusCode
    if (statusCode == 206) {
        // 编写你的部分结果处理逻辑
        println("Received partial result with status code 206")
    }
}

代码示例(协程异步调用)

如果你用的是协程风格的异步API,写法类似:

import com.apollographql.apollo3.api.http.HttpResponseInfo
import kotlinx.coroutines.runBlocking

val apolloClient = ApolloClient.Builder()
    .serverUrl("your-graphql-endpoint")
    .build()

runBlocking {
    val response = apolloClient.query(YourGraphQLQuery()).await()
    val httpResponseInfo = response.metadata.find<HttpResponseInfo>()
    
    httpResponseInfo?.let {
        if (it.statusCode == 206) {
            // 处理部分结果
        }
    }
}

说明

HttpResponseInfo不仅包含状态码,还可以获取HTTP响应头、响应长度等信息。如果你的项目还在使用Apollo Kotlin 2.x版本,需要通过自定义拦截器来捕获HTTP响应详情,但更推荐升级到3.x版本以使用更简洁的元数据API。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 17:24:59