在Java lambda中使用DynamoDB扫描表达式时出现AmazonDynamoDB异常



当尝试按特定列搜索时,我需要另一双眼睛来看待这个错误,在这种情况下是email:

com.amazonaws.services.dynamodbv2.model.AmazonDynamoDBException: ExpressionAttributeValues can only be specified when using expressions: FilterExpression is null (Service: AmazonDynamoDBv2; Status Code: 400; Error Code: ValidationException;

这是我的lambda代码:

var eav = new HashMap<String, AttributeValue>();
eav.put(":email", new AttributeValue().withS(email));
var scanExpression = new DynamoDBScanExpression()
.withFilterExpression("email = :email")
.withExpressionAttributeValues(eav);
return dynamoDBMapper.scan(Test.class, scanExpression);

我无法重现您的问题,此代码运行并返回预期结果:

public class DynamoDBMappingTest {
public static void main( String[] args ) {
String email = "somebody@360works.com";
final AmazonDynamoDB ddb = AmazonDynamoDBClientBuilder.defaultClient();
DynamoDBMapper dynamoDBMapper = new DynamoDBMapper( ddb );

Map<String, AttributeValue> eav = new HashMap<>();
eav.put(":email", new AttributeValue().withS(email));
DynamoDBScanExpression scanExpression = new DynamoDBScanExpression()
.withFilterExpression("email = :email")
.withExpressionAttributeValues(eav);
final PaginatedScanList<Test> scan = dynamoDBMapper.scan( Test.class, scanExpression );
scan.forEach( System.out::println );
}
}

这是我的数据类:

@DynamoDBTable( tableName="DbMapperTest" )
public class Test {

public String id;

public String email;

public String firstname;

public String lastname;
@DynamoDBHashKey(attributeName="id")
public String getId() {
return id;
}
public void setId( String id ) {
this.id = id;
}
@DynamoDBAttribute
public String getEmail() {
return email;
}
public void setEmail( String email ) {
this.email = email;
}
@DynamoDBAttribute
public String getFirstname() {
return firstname;
}
public void setFirstname( String firstname ) {
this.firstname = firstname;
}
@DynamoDBAttribute
public String getLastname() {
return lastname;
}
public void setLastname( String lastname ) {
this.lastname = lastname;
}
@Override
public String toString() {
return "Test{" +
"id='" + id + ''' +
", email='" + email + ''' +
", firstname='" + firstname + ''' +
", lastname='" + lastname + ''' +
'}';
}
}

最新更新