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

Azure Cosmos DB(Ktor+Kotlin)中CosmosItemResponse.getItem()返回null问题

解决Azure Cosmos DB SDK创建文档后CosmosItemResponse.item为null的问题

问题原因

Azure Cosmos DB Java/Kotlin SDK 4.x版本中,createItem方法默认不会返回创建后的文档对象——这是出于性能优化考虑,避免额外的网络传输开销。所以即使文档已成功写入数据库,response.item仍会是null,触发后续空指针调用异常。

修复方案

有两种可行的修复方式,按需选择:

方式一:开启写入后返回内容的选项

显式配置CosmosItemRequestOptions,让SDK返回写入后的文档内容:

override suspend fun createSession(session: Session): Response? {
    try {
        session.id = UUID.randomUUID().toString()
        // 创建请求选项并开启写入返回内容
        val requestOptions = CosmosItemRequestOptions().apply {
            isEnableContentResponseOnWrite = true
        }
        val response = sessionContainerRef.createItem(session, requestOptions)
        return Response (
            response.item.id!!,
            response.item.name
        )
    } catch (ex: Exception) {
        throw ex
    }
}

方式二:直接使用传入的Session对象

由于写入前已经手动设置了session.id,且文档写入成功后,该对象的字段内容与数据库中存储的完全一致,可直接用它构造返回结果,无需依赖SDK返回的item:

override suspend fun createSession(session: Session): Response? {
    try {
        session.id = UUID.randomUUID().toString()
        sessionContainerRef.createItem(session)
        return Response (
            session.id!!,
            session.name
        )
    } catch (ex: Exception) {
        throw ex
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 08:10:08