无法编组类型类com.amazonaws.services.dynamodbv2.model.AttributeValue而没有自定义封送程序或@DynamoDBDocument批注

时间:2017-01-01 02:24:29

标签: java android amazon-web-services amazon-dynamodb

所以我在创建iOS版本后一直在构建我的应用程序的Android版本,我正在使用AWS DynamoDB作为我的数据库。我有一个列表项,并试图在其中保存嵌套对象。这是文档在数据库中的样子:

enter image description here

因为我知道这些是Map数据类型(当我将它们加载到应用程序时它们就是这样),我也尝试将它们保存为Map数据类型。以下是我的FriendsDO AWS表中的代码:

public class FriendsDO {
    private String _userFriendsId;
    private List<Map<String, AttributeValue>> _friendRequests;

        @DynamoDBHashKey(attributeName = "userFriendsId")
        @DynamoDBAttribute(attributeName = "userFriendsId")
        public String getUserFriendsId() {
            return _userFriendsId;
        }

        public void setUserFriendsId(final String _userFriendsId) {
        this._userFriendsId = _userFriendsId;
        }


        @DynamoDBAttribute(attributeName = "friendRequests")
        public List<Map<String, AttributeValue>> getFriendRequests() {
            return _friendRequests;
        }
        public void setFriendRequests(final List<Map<String, AttributeValue>> _friendRequests) {
            this._friendRequests = _friendRequests;
    }

我拿出剩余的物品,使其更具可读性。以下代码行是我在尝试将新Map项目保存到List中时编写的。

    FriendsDO friendsTblToUpdate = new FriendsDO();

    List<Map<String, AttributeValue>> requestList = new ArrayList<Map<String, AttributeValue>>();

        Map<String, AttributeValue> mapToSave = new HashMap<String, AttributeValue>();
                            mapToSave.put("friendID", new AttributeValue().withS(personId));
                            mapToSave.put("friendName", new AttributeValue().withS(personName));
                            mapToSave.put("friendUsername", new AttributeValue().withS(personUsername));

                            requestList.add(mapToSave);

            friendTblToUpdate.setUserFriendsId(item.get("userFriendsId").getS());
            friendTblToUpdate.setUserId(fbId);
            friendTblToUpdate.setFriendRequests(requestList);

    try {
       objectMapper.save(friendTblToUpdate);

        } catch (final AmazonClientException ex) {
             ex.printTraceStack();
        }

这是我收到的堆栈:

com.amazonaws.mobileconnectors.dynamodbv2.dynamodbmapper.DynamoDBMappingException: Cannot marshall type class com.amazonaws.services.dynamodbv2.model.AttributeValue without a custom marshaler or @DynamoDBDocument annotation.
                                                                        at com.amazonaws.mobileconnectors.dynamodbv2.dynamodbmapper.ConversionSchemas$StandardItemConverter.getObjectToMapMarshaller(ConversionSchemas.java:387)
                                                                        at com.amazonaws.mobileconnectors.dynamodbv2.dynamodbmapper.ConversionSchemas$StandardItemConverter.augment(ConversionSchemas.java:317)
                                                                        at com.amazonaws.mobileconnectors.dynamodbv2.dynamodbmapper.ConversionSchemas$StandardItemConverter.getMemberMarshaller(ConversionSchemas.java:300)
                                                                        at com.amazonaws.mobileconnectors.dynamodbv2.dynamodbmapper.ConversionSchemas$StandardItemConverter.getMapToMapMarshaller(ConversionSchemas.java:369)
                                                                        at com.amazonaws.mobileconnectors.dynamodbv2.dynamodbmapper.ConversionSchemas$StandardItemConverter.augment(ConversionSchemas.java:314)
                                                                        at com.amazonaws.mobileconnectors.dynamodbv2.dynamodbmapper.ConversionSchemas$StandardItemConverter.getMemberMarshaller(ConversionSchemas.java:300)
                                                                        at com.amazonaws.mobileconnectors.dynamodbv2.dynamodbmapper.ConversionSchemas$StandardItemConverter.getListToListMarshaller(ConversionSchemas.java:341)
                                                                        at com.amazonaws.mobileconnectors.dynamodbv2.dynamodbmapper.ConversionSchemas$StandardItemConverter.augment(ConversionSchemas.java:310)
                                                                        at com.amazonaws.mobileconnectors.dynamodbv2.dynamodbmapper.ConversionSchemas$StandardItemConverter.getMarshaller(ConversionSchemas.java:291)
                                                                        at com.amazonaws.mobileconnectors.dynamodbv2.dynamodbmapper.ConversionSchemas$StandardItemConverter.convert(ConversionSchemas.java:257)
                                                                        at com.amazonaws.mobileconnectors.dynamodbv2.dynamodbmapper.DynamoDBMapper$SaveObjectHandler.execute(DynamoDBMapper.java:1044)
                                                                        at com.amazonaws.mobileconnectors.dynamodbv2.dynamodbmapper.DynamoDBMapper.save(DynamoDBMapper.java:904)
                                                                        at com.amazonaws.mobileconnectors.dynamodbv2.dynamodbmapper.DynamoDBMapper.save(DynamoDBMapper.java:688)
                                                                        at     com.treyherman.gifwrap.FindFBFriendsActivity$ViewHolder$2$1.run(FindFBFriendsActivity.java:362)

有人知道是否可以在Android DynamoDB中保存Map项目?在iOS中这么简单,我花了很多时间试图在Android中弄明白。谢谢你提前帮忙。

1 个答案:

答案 0 :(得分:0)

想出答案,我只是在思考一切。我只需将friendRequests数据类型更改为:private List<Map<String, String>> _friendRequests;然后我相应地调整了其余的代码。