Map <string,string>变量未在DynamoDB Local中添加,但在Real DynamoDB中运行良好

时间:2017-10-26 07:47:56

标签: amazon-dynamodb

我正在尝试使用Spring for DynamoDb插件将Map变量添加到DynamoDbLocal数据库中......当我写入时不会出现任何错误但是当我读取相同的变量时,我会对地图请求获得空值。

我相信这个数据类型默认由DynamoDbMapper管理。你知道什么是错的或需要做什么吗?

这是我的域代码

package com.wt.domain;

import java.io.Serializable;
import java.util.HashMap;
import java.util.Map;

import org.springframework.data.annotation.Id;

import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBAttribute;
import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBHashKey;
import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBIgnore;
import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBRangeKey;
import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBTable;

import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;

@DynamoDBTable(tableName = "Notification")
@AllArgsConstructor
@NoArgsConstructor
public class Notification implements Serializable {

  private static final long serialVersionUID = 1L;
  @Id
  @DynamoDBIgnore
  private NotificationCompositeKey notificationCompositeKey = new NotificationCompositeKey();

  @Getter
  @Setter
  @DynamoDBAttribute // This is the Map - Giving Null when read
  private Map<String,String> jsonMessage = new HashMap<String, String>();

  @DynamoDBHashKey(attributeName = "identityId")
  public String getIdentityId() {
    return notificationCompositeKey.getIdentityId();
  }

  public void setIdentityId(String identityId) {
    notificationCompositeKey.setIdentityId(identityId);
  }

  public void setTimestamp(long timestamp) {
    notificationCompositeKey.setTimestamp(timestamp);
  }

  @DynamoDBRangeKey(attributeName = "notificationTimestamp")
  public long getTimestamp() {
    return notificationCompositeKey.getTimestamp();
  }

}

2 个答案:

答案 0 :(得分:0)

首先,我假设您已经在某些部署环境而不是本地环境中测试了连接到真实DynamoDB的代码。

我认为,本地DynamoDB上的问题是。问题应该是使用lombok API创建getter和setter的方式。如果删除lombok getter和setter注释并手动添加getter / setter。它也适用于本地Dynamodb。我见过这种行为。

@DynamoDBAttribute(attributeName = "jsonMessage")
public Map<String, String> getJsonMessage() {
    return jsonMessage;
}

public void setJsonMessage(Map<String, String> jsonMessage) {
    this.jsonMessage = jsonMessage;
}

答案 1 :(得分:0)

Thanx家伙 - 问题得到解决,问题是如果值为null则保持条件,然后在地图中为该键值插入空字符串。

即使按照AWS文档 - 如果值为null或空白,它也不会允许输入Map或List数据类型。