gpt4 book ai didi

java - 在 DynamoDB 中存储 Java 枚举的字符串值而不是枚举值本身

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:50:33 25 4
gpt4 key购买 nike

我正在使用 DynamoDB,我想存储 enumString 值而不是 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 并设计 gettersetter 来发送/接收 enum 对象(即来源)。

警报等级:-

    @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 表中获取项目也可以正常工作。

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;

}

关于java - 在 DynamoDB 中存储 Java 枚举的字符串值而不是枚举值本身,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43769707/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com