ユーザーがリクエスト本文で渡すパラメーターに従ってアイテムをリストできるようにする API エンドポイントを作成しています。
パーティション キーを唯一の必須パラメータにしたい。クライアントは、クエリで必要なレベルの粒度を達成するために、0 個以上のキーと値のペアを渡すことができます。
私の 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を使用しています。