0
解析枚举我有这样一个类:问题,同时使用GSON
@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以上。为此,我需要将enum转换为一个字符串,并且我写了以下内容。
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);
}
}
但这不起作用。从数据库中获取值时,出现以下错误:
java.lang.String cannot be cast to java.lang.Enum (through reference chain: java.util.ArrayList[0]->["security_group_type_to_id"])
我是否缺少这方面的内容?我在其他帖子上搜索如何使用@SerializedName
注释将枚举转换为字符串。但是那也行不通。我也尝试了另一篇文章中提到的解决方案,但它不起作用。也许是因为我的枚举本身是地图的一部分,我不能真正注释地图内的枚举属性。
[序列化和反序列化与枚举的枚举]的可能重复](https://stackoverflow.com/questions/16740078/serialize-and-deserialize-enum-with-gson) – Tschallacka
@Tschallacka,我的问题是不同的。我已经在其他文章中提到过了。 – sarah