J'ai une classe comme ceci:problèmes lors de l'analyse énumérations à l'aide 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;
}
Ici, SubnetType
est un ENUM comme ceci:
public enum SubnetType
{
AppSubnet,
DBSubnet,
DMZSubnet;
}
Maintenant, je veux stocker ci-dessus dans AWS DynamoDB . Pour cela, j'ai besoin de convertir enum en une chaîne et j'ai écrit ce qui suit.
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);
}
}
Mais cela ne fonctionne pas. Tout en obtenant des valeurs de DB, j'obtiens l'erreur suivante:
java.lang.String cannot be cast to java.lang.Enum (through reference chain: java.util.ArrayList[0]->["security_group_type_to_id"])
Est-ce que je manque quelque chose dans ceci? J'ai cherché sur d'autres publications comment convertir enums en chaîne en utilisant @SerializedName
annotation. Mais cela n'a pas fonctionné non plus. J'ai également essayé la solution mentionnée dans l'autre article, mais cela ne fonctionne pas. Peut-être parce que mon énumération fait partie de la carte et que je ne peux pas vraiment annoter l'attribut enum à l'intérieur de la carte.
Copie possible de [serialize et deserialize enum avec Gson] (https://stackoverflow.com/questions/16740078/serialize-and-deserialize-enum-with-gson) – Tschallacka
@Tschallacka, ma question est différente. J'ai déjà ce qui est mentionné dans l'autre post. – sarah