我有一个这样的课程:
@JsonInclude(Include.NON_NULL)
@JsonNaming(PropertyNamingStrategy.SnakeCaseStrategy.class)
public class VPC
{
@NotNull()
private String id;
@NotNull()
@DynamoDBMarshalling(marshallerClass = SubnetTypeMarshaller.class)
private Map<SubnetType, List<String>> subnetTypeToId;
}
在这里,SubnetType
是这样的枚举:
public enum SubnetType
{
AppSubnet,
DBSubnet,
DMZSubnet;
}
现在,我想将上述内容存储在AWS DynamoDB中。为此,我需要将枚举转换为字符串,我写了以下内容。
public class SubnetTypeMarshaller implements DynamoDBMarshaller<Map<SubnetType, List<String>>>
{
private Gson gson = new GsonBuilder().create();
@Override
public String marshall(final Map<SubnetType, List<String>> securityGroupTypeListMap)
{
return gson.toJson(securityGroupTypeListMap);
}
@Override
public Map<SubnetType, List<String>> unmarshall(final Class<Map<SubnetType, List<String>>> aClass,
final String s)
{
return gson.fromJson(s, aClass);
}
}
但这不起作用。从DB获取值时,我收到以下错误:
java.lang.String无法强制转换为java.lang.Enum(通过引用链:java.util.ArrayList [0] - &gt; [“security_group_type_to_id”])
我错过了什么吗?我在其他帖子中搜索了如何使用@SerializedName
注释将枚举转换为字符串。但这也不起作用。我也尝试过其他帖子中提到的解决方案,但它不起作用。也许是因为我的枚举本身就是地图的一部分,我无法真正注释地图中的枚举属性。