为什么我会收到无法使用适用于 Java 的 AWS 开发工具包解组异常响应?

问题描述 投票:0回答:1

我有一个 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)

出了什么问题?

java amazon-web-services amazon-dynamodb aws-sdk-java-2.0
1个回答
2
投票

这不是 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 服务。

© www.soinside.com 2019 - 2024. All rights reserved.