gpt4 book ai didi

android - 在 DynamoDB Map 中插入 java.lang.Object

转载 作者:行者123 更新时间:2023-11-30 00:49:27 28 4
gpt4 key购买 nike

我正在使用在 DynamoDB 中同步数据的 Android 应用

我需要插入属性 List<Map<String, Object>>

这是我的 DynamoDB 表结构

public class AmznDynamoDeviceDB {
private String identityID;
private String deviceName;
private List<Map<String, Object>> channels;

@DynamoDBHashKey(attributeName = "identityID")
public String getIdentityId(){
return this.identityID;
}
public void setIdentityId(String identityID){
this.identityID = identityID;
}

@DynamoDBAttribute(attributeName = "deviceName")
public String getDeviceName(){
return this.deviceName;
}
public void setDeviceName(String deviceName){
this.deviceName = deviceName;
}

@DynamoDBAttribute(attributeName = "channels")
public List<Map<String, Object>> getChannels(){
return this.channels;
}
public void setChannels(List<Map<String, Object>> channels){
this.channels = channels;
}
}

当我在 DynamoDB 中插入时出现以下错误

W/System.err: com.amazonaws.mobileconnectors.dynamodbv2.dynamodbmapper.DynamoDBMappingException: Cannot marshall type class java.lang.Object without a custom marshaler or @DynamoDBDocument annotation.

我可以在 DynamoDB 的 Map 元素中插入 java.lang.Object 吗?

注意:如果我使用 @DynamoDBMarshalling将数据存储为字符串,我需要插入为 List<Map<String, Object>>

提前致谢。

最佳答案

如果您想保留 channel属性为 List<Map<String, Object>> ,简单的答案是您不能将值保存为 Map 对象列表。唯一可用的解决方案是将数据转换为字符串并存储在 DynamoDB 中。

转换为字符串或 JSON 的几个选项:-

1) @DynamoDBTypeConvertedJson - 此注解可用于将数据转换为 JSON 并将其作为 String 属性存储在 DynamoDB 中

@DynamoDBMarshalling - 已弃用

2) 编写自定义转换器。同样,这会将数据保存为 DynamoDB 中的字符串。

DynamoDBTypeConverted

注意:-

虽然DynamoDB支持List、Map等Document数据类型,但是如果List里面有Map,就无法查询到数据。 DynamoDB API 不支持过滤此数据模型的数据。

如果您需要支持查询/更新 channels 的任何用例属性,我强烈建议重新考虑数据模型以扁平化数据结构。

另一个缺点是无法在文档数据类型(列表和 map )上创建索引。

关于android - 在 DynamoDB Map 中插入 java.lang.Object,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41302414/

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