我正在使用DynamoDB,我希望存储enum
的{{1}}值,而不是String
本身。
例如,我有enum
:
enum
......和这个“实体”:
public enum Source {
BREACH("breach"),
LEAKAGE("leakage");
private final String desc;
Source(String desc) { this.desc = desc; }
public String desc() { return desc; }
}
使用@DynamoDBTable(tableName = "Alerts")
public final class Alert implements Serializable {
private static final long serialVersionUID = 4012517315640518044L;
@DynamoDBHashKey(attributeName = "AlertId") // Partition Key or Hash Attribute
private String alertId;
@DynamoDBTypeConvertedEnum
@DynamoDBAttribute(attributeName = "Source")
private Source type;
// Constructor(s), Getter(s), Setter(s), ToString, etc...
}
注释,保存的值为@DynamoDBTypeConvertedEnum
,但我想要BREACH
。
breach
任何线索?我确实试过“转换器”(不完全,但我不能让它工作)但我想我必须为每个{
"AlertId": { "S": "a083168d-cb23-4ec8-ab80-a1c16955c4b8" },
"Source": { "S": "BREACH" },
...
"CreatedAt": { "S": "2017-05-03T14:07:36.395Z" }
}
类型做一个,因为它们都是不同的。
答案 0 :(得分:1)
您可以像这样对Alert类进行编码,即将属性定义为String并设计appUser
和getter
来发送/接收枚举对象(即Source)。< / p>
警报类: -
setter
创建提醒:
在数据库表上按预期存储值。 DynamoDB表中的get项也可以正常工作。
@DynamoDBTable(tableName = "Alerts")
public final class Alert implements Serializable {
private static final long serialVersionUID = 4012517315640518044L;
private String alertId;
private String type;
@DynamoDBHashKey(attributeName = "AlertId")
public String getAlertId() {
return alertId;
}
@DynamoDBAttribute(attributeName = "Source")
public Source getType() {
if (type != null)
return Source.valueOf(type);
else
return null;
}
public void setAlertId(String alertId) {
this.alertId = alertId;
}
public void setType(Source type) {
this.type = type.desc();
}
}
答案 1 :(得分:0)
覆盖toString()这应该有用。
public enum Source {
BREACH("breach"),
LEAKAGE("leakage");
private final String desc;
Source(String desc) { this.desc = desc; }
public String desc() { return desc; }
@Override
public String toString() { return desc; }
}