我有一个 Java 17 项目,它与 DynamoDB Local 交互并在运行测试时配置和部署它。
这是我测试中的一些代码:
var mapper = new DynamoDBMapper(amazonDynamoDB);
Map<String, AttributeValue> attributes = new HashMap<>();
attributes.put(":test", new AttributeValue().withS("tomato"));
var query = " ( contains(value, :test)) ";
mapper.batchSave(Arrays.asList(
DynamoTestModel.builder().value("mango").build(),
DynamoTestModel.builder().value("avocado").build(),
DynamoTestModel.builder().value("other fruit").build(),
DynamoTestModel.builder().value("other other fruit").build(),
DynamoTestModel.builder().value("jack fruit").build(),
DynamoTestModel.builder().value("tomato").build()
));
var scanResult = mapperscanPage(DynamoTestModel.class, new DynamoDBScanExpression()
.withFilterExpression(query)
.withExpressionAttributeValues(attributes));
Assertions.assertEquals(1, scanResult.getCount());
Assertions.assertEquals("tomato", scanResult.getResults().get(0).getValue());
上面产生了这个错误:
无法使用提供的解组器解组异常响应(服务:AmazonDynamoDBv2;状态代码:400;错误代码:ValidationException;请求 ID:0AS59VHPQ7IO0OIEQI4J9PEQIRVV4KQNSO5AEMVJF66Q9ASUAAJG;代理:null) com.amazonaws.AmazonServiceException:无法使用提供的解组器解组异常响应(服务:AmazonDynamoDBv2;状态代码:400;错误代码:ValidationException;请求 ID:0AS59VHPQ7IO0OIEQI4J9PEQIRVV4KQNSO5AEMVJF66Q9ASUAAJG;代理:null)
出了什么问题?
这不是 DynamoDB Local 的问题。
无法使用提供的解组器解组异常响应
您的异常的第一部分只是您的设置问题,我在here详细解释了这一点。
错误代码:ValidationException
这才是真正的问题。
ValidationException
通常与不正确的语法有关。
var query = " ( contains(value, :test)) ";
这里的
value
是什么?它应该是一个属性名称。 value 是 DynamoDB 中的保留关键字,如果您的属性名称称为 value
那么您应该使用 ExpressionAttributeNames
。
如果您没有使用保留关键字并且
value
不是您的属性名称,您可以简单地这样做:
var query = "contains(myAttributeName, :test)";
最后一点是,您将在堆栈跟踪中返回一个 RequestId,这意味着您没有访问 DynamoDB Local,而是访问了 Web 服务。