我在DynamoDB中有一个布尔值,如下所示在我的代码中映射 -
@DynamoDBAttribute(attributeName = "isFlagged")
public Boolean getFlagged() {
return isFlagged;
}
当我使用dynamoDB mapper查询表时,我总是得到null。所以我查了一些文档并添加了注释 -
@DynamoDBConvertedBool(DynamoDBConvertedBool.Format.true_false)
@DynamoDBAttribute(attributeName = "isFlagged")
public Boolean getFlagged() {
return isFlagged;
}
我收到'无法转换属性'错误。我该如何解决这个问题?
PS - 我是DynamoDB的初学者,感谢您的帮助。
答案 0 :(得分:1)
似乎存在DynamoDB中存储的数据格式存在问题。
首先,这是DynamoDB所期望的:
布尔
布尔类型属性可以存储true或false。
检查表中的数据实际上与此匹配。你有没有没有" isFlagged"属性?其中一些是否为空?
如果您需要将空值/空值转换为布尔值,则需要实现自定义转换器,该转换器具有非常简单的界面:
// Converts between String (DynamoDB side) and Boolean (application side)
public class MyBooleanConverter implements DynamoDBTypeConverter<String, Boolean> {
// Add any checks/conversions you see fit:
@Override
// Convert to DynamoDB attribute
public String convert(Boolean object) {
return object.toString();
}
@Override
// Convert from DynamoDB attribute
public Boolean unconvert(String object) {
// Parse as you see necessary here
return Boolean.parse(object);
}
}
现在使用您的转换器注释您的属性:
@DynamoDBConvertedBool(converter = MyBooleanConverter.class)
@DynamoDBAttribute(attributeName = "isFlagged")
public Boolean getFlagged() {
...
}
<强> P.S。强>
如果您的方法名称与您的属性名称匹配,则不需要指定属性名称:
@DynamoDBConvertedBool(converter = MyBooleanConverter.class)
public Boolean isFlagged() {
...
}
应该够了。此外,布尔getter应该具有isX格式。
答案 1 :(得分:0)
注释是: @DynamoDBTypeConverted(converter = MyBooleanConverter.class)
返回Boolean.valueOf(object);
休息为我工作。
答案 2 :(得分:0)
您需要添加注释@DynamoDBTyped
@DynamoDBTyped(DynamoDBMapperFieldModel.DynamoDBAttributeType.BOOL)
@DynamoDBAttribute(attributeName = "isFlagged")
private boolean isFlagged;