Java在表中显示DynamoDB扫描属性值



我试图对DynamoDB表进行扫描,然后在表中显示用户选择的字段。问题是,如果数据作为AttributeValues返回,我该如何做到这一点,因为不是所有的值都是字符串,而且我事先不知道每个值是什么类型。

我的代码:

ScanRequest request =
ScanRequest
.builder()
.tableName(tableName))
.build();
ScanIterable response = client.scanPaginator(request);
List<Map<String, AttributeValue>> data = new ArrayList<>();
for (ScanResponse page : response) {
for (Map<String, AttributeValue> item : page.items()) {
data.add(item);
}
}

然后获取值:

for (Map<String, AttributeValue> map : items) {
for (Map.Entry<String, AttributeValue> entry : map.entrySet()) {
//get the entry.getValue() and append it to a string
}
}

如果我使用:

entry.getValue().toString()

我将得到一个包含属性值类型和值的字符串,例如'N': '127'如果我使用:

entry.getValue().s()

当类型不是'S'时,我将获得空值

在这种情况下,由于您不想处理DynamoDB JSON,您应该使用文档接口。

许多AWS sdk提供文档接口,允许您对表和索引执行数据平面操作(创建、读取、更新、删除)。使用文档接口,您不需要指定数据类型描述符。数据类型由数据本身的语义隐含。这些AWS sdk还提供了方便地将JSON文档与原生Amazon DynamoDB数据类型进行转换的方法。

最新更新