2017-04-04 96 views
1

我试图获得dynamoDB表,我得到错误:使用DynamoDBMarshaller - 马歇尔如何返回INT

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

如果我理解正确你的问题,你已经存储有字符串数据类型上DynamoDB的属性。但是,当您从mapper返回值时,您希望将其作为整数返回(即Java原始类型int)。

这里是例子。

请注意该属性被定义为int模型上。

private int postCounter; 

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

postCounter属性存储为字符串在DynamoDB表: -

见下面的屏幕截图。

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

enter image description here