使用DynamoDBMarshaller - marshall如何返回int

时间:2017-04-04 14:31:57

标签: java amazon-dynamodb

我正在尝试使用dynamoDB表,我收到错误:

com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMappingException: 
Expected S in value {N: 0,} when invoking public void 
com.genieo.installer.data.MacClient.setGuardActivityCounter(int)"]}

我知道我需要使用DynamoDBMarshaller实现。

我试过这样:

public static class GuardActivityCounterDynamoDBMarshaller implements DynamoDBMarshaller<Integer>
{

    @Override
    public int marshall(Integer getterReturnResult) {
        return 0;
    }

    @Override
    public Integer unmarshall(Class<Integer> clazz, String obj) {
        return 0;
    }

}

但不幸的是,马歇尔函数无法返回int。

如果有人能帮助我,我很乐意。

提前致谢

半乳糖

1 个答案:

答案 0 :(得分:0)

如果我正确理解了您的问题,那么您已使用String数据类型在DynamoDB上存储了一个属性。但是,当您从mapper返回值时,您希望将其作为整数返回(即Java原始int类型)。

以下是示例。

请注意,该属性在模型上定义为 int

private int postCounter;

@DynamoDBTyped(DynamoDBAttributeType.S)
@DynamoDBAttribute(attributeName = "postCounter")
public int getPostCounter() {
    return postCounter;
}

postCounter属性在DynamoDB表中存储为String: -

请参阅下面的屏幕截图。

但是,映射器将属性视为Integer。注释 @DynamoDBTyped 用于指示DynamoDB数据类型,而不是基于Java数据类型自动解释。

enter image description here