使用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
相关产品推荐
相关产品推荐

