我使用DynamoDB映射器,并且具有以下Item.class。这些值使用KMS密钥加密。
public class Item {
private String id
private String personID;
@DynamoDBHashKey
@DynamoDBGeneratedUuid(DynamoDBAutoGenerateStrategy.CREATE)
public String getId(){
return id;
}
@DynamoDBAttribute
@DynamoDBIndexHashKey(globalSecondaryIndexName = "personID-index")
public String getPersonID() {
return personID;
}
};
当我尝试保存项目时,出现以下错误
AmazonDynamoDBException: One or more parameter values were invalid: Type mismatch for Index Key personID Expected: S Actual: B IndexName: personID-index
虽然该错误表明我将其作为B发送,但根据我的代码,它是一个字符串值S。
根据https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/DynamoDBMapper.DataTypes.html S-字符串,B为二进制。我看不到我的personID在哪里转换为二进制值。
感谢您提供有关消除错误的帮助。
答案 0 :(得分:0)
这是因为PersonID是使用KMS密钥加密的。您可以明确地说不要使用@DoNotTouch
批注对属性进行签名或加密。
public class Item {
private String id
private String personID;
@DynamoDBHashKey
@DynamoDBGeneratedUuid(DynamoDBAutoGenerateStrategy.CREATE)
public String getId(){
return id;
}
@DoNotTouch
@DynamoDBAttribute
@DynamoDBIndexHashKey(globalSecondaryIndexName = "personID-index")
public String getPersonID() {
return personID;
}
};
如果您希望对密钥进行加密,那么您还可以进行服务器端加密,因为DynamoDB现在支持Rest上的服务器端加密。 https://aws.amazon.com/about-aws/whats-new/2018/02/amazon-dynamodb-now-supports-server-side-encryption-at-rest/