我正在尝试使用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();
}
}
答案 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数据类型。