2017-04-04 26 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