[英]Store Java enum's String value instead of enum value itself in DynamoDB
我正在使用DynamoDB,我想存儲enum
的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" }
}
有線索嗎? 我確實試過“轉換器”(不完全,但我不能讓它工作)但我認為我必須為每個enum
類型做一個,因為它們都是不同的。
您可以像這樣編寫Alert類,即將屬性定義為String並設計getter
和setter
以發送/接收枚舉對象(即Source)。
警報類: -
@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();
}
}
創建提醒: -
在數據庫表上按預期存儲值。 DynamoDB表中的get項也可以正常工作。
public Boolean createAlert(String alertId, Source source) {
DynamoDBMapper dynamoDBMapper = new DynamoDBMapper(dynamoDBClient);
Alert alert = new Alert();
alert.setAlertId(alertId);
alert.setType(source);
dynamoDBMapper.save(alert);
return true;
}
覆蓋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; }
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.