我使用的是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; }
}...and这个“实体”:
@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类型做一个,因为它们都是不同的。
发布于 2017-05-04 05:36:37
您可以这样编写Alert类的代码,即将属性定义为字符串,并设计getter和setter来发送/接收枚举源对象(即)。
警报类:-
@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();
}
}创建警报:-
按照预期将值存储在数据库表中。get item from DynamoDB表也可以正常工作。
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;
}发布于 2018-02-15 04:10:44
覆盖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; }
}https://stackoverflow.com/questions/43769707
复制相似问题