我正在编写一个 API 端点,以允许用户根据他们在请求正文中传递的参数列出项目。
我希望分区键是唯一必需的参数;客户端将被允许传递零个或多个键值对以在查询中实现所需的粒度级别。
我的 DynamoDB 表包含具有以下结构的项目:
{
"appName": { //PARTITION KEY
"S": "APP_1"
},
"requestId": { // SORT KEY
"S": "request_1224"
},
"creationTime": {
"N": "1636332520679"
},
"resolver": {
"S": "SOMEONES_ID"
},
"status": {
"S": "PENDING"
}
}
我有一些工作代码,其中DynamoDBQueryExpression
是硬编码的,我确实知道如何动态组合查询表达式,但我正在考虑 for 循环和字符串操作的丑陋组合。
有没有一种优雅而干净的方式来动态组合DynamoDBQueryExpression
?
这是我的入门代码,供参考:
Map<String, AttributeValue> eav = new HashMap<String, AttributeValue>();
eav.put(":val1", new AttributeValue().withS(requestModel.getAppName()));
eav.put(":val2", new AttributeValue().withS(accessRequestModel.getRequestStatus()));
DynamoDBQueryExpression<RequestModel> queryExpression = new DynamoDBQueryExpression<RequestModel>()
.withKeyConditionExpression("appName = :val1")
.withFilterExpression("RequestStatus = :val2")
.withExpressionAttributeValues(eav);
为了更加清楚,看看我是如何做put
的并将硬编码的值传递给——withFilterConditionExpression
我希望这些值根据客户的输入动态传递。
我正在使用 Java 的AWS DynamoDB Mapper。