Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java中带有list.append的Dynamodb_Java_Amazon Web Services_Amazon Dynamodb - Fatal编程技术网

Java中带有list.append的Dynamodb

Java中带有list.append的Dynamodb,java,amazon-web-services,amazon-dynamodb,Java,Amazon Web Services,Amazon Dynamodb,目前,我的dynamodb有一个密钥是批次id,然后是一个列表“文档信息列表”。我想用下面的代码添加到列表中 但这是一个例外 com.amazonaws.services.dynamodbv2.model.AmazonDynamoDBException: ExpressionAttributeValues contains invalid value: One or more parameter values were invalid: An AttributeValue may not con

目前,我的dynamodb有一个密钥是批次id,然后是一个列表“文档信息列表”。我想用下面的代码添加到列表中

但这是一个例外

com.amazonaws.services.dynamodbv2.model.AmazonDynamoDBException: ExpressionAttributeValues contains invalid value: One or more parameter values were invalid: An AttributeValue may not contain an empty string for key :val1 (Service: AmazonDynamoDBv2; Status Code: 400; Error Code: ValidationException; Request ID: 03LRKK3J3SBVFNGMKV36NVSQBJVV4KQNSO5AEMVJF66Q9ASUAAJG)
代码:

AmazonDynamoDB amazonDynamoDBClient=AmazonDynamoDBClientBuilder.defaultClient();
DynamoDB DynamoDB=新的DynamoDB(AmazondynamodClient);
表格=发电机可获取(“XXXX”);
字符串currentDateTime=miscelper.getDateTimeAsISO8601();
Map Map=objectMapper.convertValue(doc,Map.class);
ValueMap ValueMap=new ValueMap().withList(“:val1”,Arrays.asList(map));
withList(“:empty_list”,new ArrayList());
valueMap.with字符串(“:val2”,currentDateTime);
UpdateItemSpec UpdateItemSpec=new UpdateItemSpec()。使用PrimaryKey(“批次id”,批次id)
.使用UpdateExpression(“设置文档信息列表=列表”\u追加(如果不存在(文档信息列表:空列表),:val1),创建日期时间=:val2,更新日期时间=:val2”)
.withValueMap(valueMap)
.withReturnValue(ReturnValue.UPDATED\u NEW);

我做错了什么?

那么,您正试图通过
Map
表示将
doc
保存到dynamodb中。我可能猜到的唯一问题是,您的一些
doc
字段是空的
字符串
,然后您试图将其保存为Dynamo的AttributeValue,这是不允许的:

什么是doc?这是DynamoDb实体对象吗?Doc是一个普通的pojo对象。你完全正确。我有一个包含空白数据的字段。我的错是我没有发现。再次感谢。顺便说一句,我的实施是一个很好的方法。我们可以在这个用例中使用DynamoDBMapper和实体(使用注释)吗。有了映射器,你至少可以跳过映射转换。你有没有一个我可以参考的例子,使用list_append&DynamoDBMapperI意味着你可以保持大部分代码不变,只需跳过objectMapper.convertValue(doc,map.class)。至于带mapper的SDK是否可以处理像您这样更复杂的查询,我不这么认为。但你可以提出另一个问题,也许有人会肯定地知道。:)
AmazonDynamoDB amazonDynamoDBClient = AmazonDynamoDBClientBuilder.defaultClient();
        DynamoDB dynamoDB = new DynamoDB(amazonDynamoDBClient);
        Table table = dynamoDB.getTable("XXXX");

        String currentDateTime = MiscHelper.getDateTimeAsISO8601();

        Map<String, Object> map = objectMapper.convertValue(doc, Map.class);

        ValueMap valueMap = new ValueMap().withList(":val1", Arrays.asList(map));
        valueMap.withList(":empty_list", new ArrayList<>());
        valueMap.withString(":val2", currentDateTime);
        UpdateItemSpec updateItemSpec = new UpdateItemSpec().withPrimaryKey("batch_id", batchId)
                .withUpdateExpression("set doc_info_list = list_append(if_not_exists(doc_info_list, :empty_list), :val1), created_date_time = :val2, updated_date_time = :val2")
                .withValueMap(valueMap)
                .withReturnValues(ReturnValue.UPDATED_NEW);