Amazon web services DynamoDb无法保存地图数据(java)

Amazon web services DynamoDb无法保存地图数据(java),amazon-web-services,amazon-dynamodb,Amazon Web Services,Amazon Dynamodb,我试图将数据保存到dynamoDb中,但该数据也包含一些地图属性。但在保存该数据时出错。以下是我用于保存请求数据的域类: @DynamoDBTable(tableName = "ottMiddleware_rails") public class RailsCmsDomain { @DynamoDBHashKey(attributeName = "railId") private String railId; @DynamoDBTyped @DynamoDBAttribute(attribu

我试图将数据保存到dynamoDb中,但该数据也包含一些地图属性。但在保存该数据时出错。以下是我用于保存请求数据的域类:

@DynamoDBTable(tableName = "ottMiddleware_rails")
public class RailsCmsDomain {

@DynamoDBHashKey(attributeName = "railId")
private String railId;

@DynamoDBTyped
@DynamoDBAttribute(attributeName = "railLogic")
private Map<String, Object> railLogic;

@DynamoDBAttribute(attributeName = "railSourceType")
private String railSourceType;

@DynamoDBAttribute(attributeName = "railTitle")
private RailCmsTitleDomain railTitle;

@DynamoDBTyped
@DynamoDBAttribute(attributeName = "restrictions")
private Map<String, Object> restrictions;
我使用以下代码将数据保存到dynamoDb中

public Boolean saveUpdateRailsDetails(RailsCmsDomain railsDomain) {
    DynamoDBUtil dynamoDBUtil = new DynamoDBUtil();
    AmazonDynamoDB dynamoDBClient = dynamoDBUtil.getDynamoDBClient();
    DynamoDBMapper mapper = new DynamoDBMapper(dynamoDBClient);
    mapper.save(railsDomain);
    return true;
}
请建议如何将地图保存到dynamoDb中。我将数据作为映射,因为在后面的阶段中,有可能会有更多的数据被添加到那些映射属性中,并且这些数据可以是任何数据类型。我遇到以下错误:

errorMessage": "not supported; requires @DynamoDBTyped or 
@DynamoDBTypeConverted"
"errorType": 
"com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMappingException"

问题是DynamoDB映射器不知道如何整理/取消整理此行中的
对象

private Map<String, Object> railLogic;
私有映射逻辑;

如果不想将
对象
更改为
字符串
,请使用
DynamoDBTypeConverted
注释为
映射
提供自定义封送拆收器,然后(可能)可以将其重新用于
限制
。相关文档。

我想将此答案作为一个选项发布,尽管它不会将数据作为地图存储在DynamoDB中。但是,它将解决该错误

您可以定义
限制
属性,如下所述。它将数据作为JSON字符串存储在DynamoDB中

@DynamoDBTypeConvertedJson
private Map<String, Object> restrictions;
@DynamoDBTypeConvertedJson
私人地图限制;
缺点:-

当您想要更新
限制
属性时,您需要从数据库中获取当前值,更新它并将数据保存在数据库中

发电机数据:-

限制
属性保存为JSON字符串


当我需要在dynamodb中存储map时,我只是用@DynamoDBTypeConverted(converter=MapConverter.class)注释了map的getter方法,并在转换器中将map序列化为一个json字符串,这样您就可以检索map和所有内容,但如果需要,您将无法在queryExpressions中使用它


<> P>所以,如果你想查询地图中的对象,可以考虑用ActudioBordNobe注释你在地图中使用的对象,这样它将被DyDoDB自动序列化为文档,并使用SET而不是映射到父对象。

问题是在限制属性定义上。除了客户端之外,它将包含什么类型的数据?如果属性数据定义为映射,则问题无法转换。限制将包含longok类型的periodStart,为什么不使用自定义类定义来定义类似于railTitle的限制?因为在限制中,任何类型的属性都可以稍后添加,而railTitle则不是这样,但我陷入了一个场景:我将为Map创建自定义封送拆收器,但如果需要,以后可能会出现这样的情况在railLogic中添加更多属性,每次我都必须在自定义marshaller类中进行更改。在以后的阶段中,无论我以字符串或映射对象值中的列表形式发送请求,它们都将被存储,难道没有任何解决方案吗?As对象可以是列表、字符串或其他任何东西。不完全是。自定义封送拆收器必须更改以处理
对象
的所有可能情况。我正在考虑另一种方法,如果我将整个Json请求存储在DynamoDb中,而不将其转换为字符串,该怎么办。可行吗?
@DynamoDBTypeConvertedJson
private Map<String, Object> restrictions;