DynamoDB:dynamoDb mapper为布尔值返回null

时间:2017-07-29 01:08:30

标签: amazon-dynamodb

我在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的初学者,感谢您的帮助。

3 个答案:

答案 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;