我正在尝试使用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。
如果有人能帮助我,我很乐意。
提前致谢
半乳糖
答案 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数据类型自动解释。