我正在尝试将数据保存到dynamoDb中,但该数据也包含一些Map属性。但是我在保存数据时遇到错误。以下是我用于保存请求数据的域类:
@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;
我提出以下要求:
{
"railId": "railOne",
"railLogic": {
"programType": 1,
"railSourceUrl": "http://myUrl"
},
"railSourceType": "myRail",
"railTitle": {
"tam": "Raan Phan",
"def": "சிறப்பு கட்டமைப்பு"
},
"restrictions": {
"clients": [
"abc",
"xyz"
],
"periodStart": 1506572217
}
}
我使用以下代码将数据保存到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"
答案 0 :(得分:1)
当我需要在dynamodb中存储地图时,我只是使用@DynamoDBTypeConverted(converter = MapConverter.class)注释地图的getter方法,并在转换器中将地图序列化为json字符串,这样您就可以检索地图如果你需要的话,一切都不能在queryExpressions中使用它。
因此,如果您希望能够查询地图中的对象,可以考虑使用@DynamoDBDocument在地图中注释您正在使用的对象,这样它将被dynamodb自动序列化为文档并且使用Set而不是map到您的父对象。
答案 1 :(得分:0)
问题是DynamoDB Mapper不知道如何编组/解组此行中的Object
:
private Map<String, Object> railLogic;
如果您不想将Object
更改为String
,请使用DynamoDBTypeConverted
注释为Map<String, Object>
提供自定义编组程序,然后您可以(可能)重用restrictions
。相关文档here。
答案 2 :(得分:0)