预期索引键 personID 类型不匹配:S 实际 B DynamoDB Java 中的保存错误

Type Mismatch for Index Key personID Expected: S Actual B DynamoDB Save Error in Java

我使用 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 在哪里转换为二进制值。

感谢任何有关消除错误的帮助。

这是因为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 现在支持静态服务器端加密。 https://aws.amazon.com/about-aws/whats-new/2018/02/amazon-dynamodb-now-supports-server-side-encryption-at-rest/