gpt4 book ai didi

java - Azure 函数的 CosmosDBInput 绑定(bind)未使用 HttpTrigger 中定义的路径变量

转载 作者:行者123 更新时间:2023-12-02 13:41:11 32 4
gpt4 key购买 nike

我使用 azure-functions-kotlin-archetype 使用 Kotlin 创建了一个函数。我创建了一个 Http Trigger 和一个 cosmos 输入绑定(bind)来从 cosmos 读取数据。我也提到了 sql 查询来获取数据。我想将路径变量传递给应该用作查询中的参数的 http 触发器。
根据 Microsoft 文档,我已经相应地定义了路径参数。
https://docs.microsoft.com/en-us/azure/azure-functions/functions-bindings-cosmosdb-v2-input?tabs=java#http-trigger-get-multiple-docs-from-route-data-using-sqlquery-java
但我得到空白响应,意味着没有数据被获取。如果我在 Sql 查询中对参数进行硬编码,我就能够获取数据。任何人都可以在这里告诉我这个问题。功能码如下

@FunctionName("GetData")
fun run(
@HttpTrigger(
name = "req",
methods = [HttpMethod.GET],
authLevel = AuthorizationLevel.ANONYMOUS,
route = "/api/getItems/{id}/{qnt}"
)
request: HttpRequestMessage<Optional<String>>,
@CosmosDBInput(
name = "cosmosdb",
databaseName = "item-db",
collectionName = "item",
sqlQuery = "SELECT * FROM ITEM n where n.id= {id} "
+"and n.qnt = {qnt}",
connectionStringSetting = "Cosmos_DB_Connection_String"
)
rs: Array<String>,
context: ExecutionContext): HttpResponseMessage {



return request
.createResponseBuilder(HttpStatus.OK)
.body(rs)
.build()
}

}

最佳答案

根据您提供的示例查询:SELECT * FROM ITEM n where n.id= {'ID1'} " +"and n.qnt = {1} ,看来 id是字符串和 qnt是一个数字。当我们从 route 获取参数时,它将参数视为字符串。因此,如果您使用 route 中的参数在 sqlQuery直接选择这样的sql数据:SELECT * FROM ITEM n where n.id = 'ID1' and n.qnt = '1' .所以没有数据被获取。
需要获取参数qnt作为数字而不是来自 route 的字符串, 所以请使用 route = "api/getItems/{id}/{qnt:int}" .
============================更新 ==========================
添加此更新以供其他社区引用:
使用方法StringToNumber()在像 sqlQuery = "SELECT * FROM ITEM n where n.id= {id} " + "and n.qnt = StringToNumber({qnt})" 这样的 sql 查询中.

关于java - Azure 函数的 CosmosDBInput 绑定(bind)未使用 HttpTrigger 中定义的路径变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63337640/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com