Désérialiser enum de java à partir de JSON

Nous utilisons Jackson 1.9.1 pour sérialiser et désérialiser JSON demande de la chaîne de réponse à/à partir d'objets Java. Primitifs de Java les types, les types de collection et des objets personnalisés sont (de)sérialisé sans problèmes. Cependant, j'ai un problème en essayant de désérialiser chaîne JSON en java enum.
Chaîne JSON est sérialisé comme suit:

"wt":{"wt":100.5,"unit":{"LBS":3}}

Type Java pour wt est comme suit:

public class Weight {

    protected double weight;
    protected Unit unit;
}

J'ai évoqué cette, cette, et cette sur DONC et est venu avec enum pour les unités de poids comme suit:

public enum Unit {

    KG("kg"),
    GM("gm"),
    LBS("lbs"),
    OZ("oz");

    private String value;  
    private WeightMeasurementUnit(String value) { this.value = value; }

    @JsonValue
    public String getValue() { return this.value; }

    @JsonCreator
    public static Unit create(String val) {
        Unit[] units = Unit.values();
        for (Unit unit : units) {
            if (unit.getValue().equals(val)) {
                return unit;
            }
        }
        return LBS;
    }
}

Le problème est que lorsque j'ai jamais essayer de désérialiser mentionnés ci-dessus JSON, j'obtiens cette erreur en disant: "non reconnu champ "LB" (Classe un.b.c.d.Le poids), ne sont pas marqués comme ignorable" Exception stacktrace est comme suit:

Caused by: org.codehaus.jackson.map.exc.UnrecognizedPropertyException: Unrecognized field "LBS" (Class a.b.c.d.Weight), not marked as ignorable
 at [Source: java.io.ByteArrayInputStream@20172017; line: 1, column: 464] (through reference chain: a.b.c.d.MyRequest["blah"]->a.b.c.d.AnotherType["wt"]->a.b.c.d.Weight["LBS"])
    at org.codehaus.jackson.map.exc.UnrecognizedPropertyException.from(UnrecognizedPropertyException.java:53)
    at org.codehaus.jackson.map.deser.StdDeserializationContext.unknownFieldException(StdDeserializationContext.java:267)
    at org.codehaus.jackson.map.deser.std.StdDeserializer.reportUnknownProperty(StdDeserializer.java:673)
    at org.codehaus.jackson.map.deser.std.StdDeserializer.handleUnknownProperty(StdDeserializer.java:659)
    at org.codehaus.jackson.map.deser.BeanDeserializer.handleUnknownProperty(BeanDeserializer.java:1365)

...

Mes questions sont les suivantes:
Est sérialisé chaîne JSON pour enum semble correct ?
Que dois-je inclure (ou d'annoter) pour l'enum pour être correctement désérialisé ?

  • Juste deviner ressemble à des numéros de votre champs de type enum dans l'ordre lors de la sérialisation, KG = 1, GM = 2, etc. Cela fonctionne si vous utilisez ces numéros de votre enum initialiseurs je.e à utiliser KG(1); GM(2); LIVRES(3); OZ(4); dans la définition de l'enum Unité ?
InformationsquelleAutor chetan | 2013-08-29