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

