2013-04-11 13 views
12

Ich bin mit JacksonPolymorphicDeserialization arbeiten, das ist mein Code, der in die richtige Klasse deserialisiert mit Sitz in der ‚Typ‘ Eigenschaft:Jackson Polymorphe Deserialisierung basierend auf Enum

@JsonTypeInfo( 
    use = JsonTypeInfo.Id.NAME, 
    include = JsonTypeInfo.As.PROPERTY, 
    property = "type", 
    defaultImpl = Event.class, 
    visible = true) 
@JsonSubTypes({   
    @Type(value = SpecialEvent1.class, name = "SPECIAL_EVENT_1"), 
    @Type(value = SpecialEvent2.class, name = "SPECIAL_EVENT_2"), 
    }) 
public abstract class AbstractEvent { 

    private String type; 

    public String getType() { 
    return type; 
    } 

    public void setType(String type) { 
    this.type = type; 
    } 
} 

Es funktioniert perfekt und mein json verwandelt sich in die erwartete Klasse gemäß dem Typ-Wert.

Allerdings bin ich in Anbetracht der 'Typ' Eigenschaft von String in Enum zu bewegen, das ist mein neuer Code mit dieser Änderung:

@JsonTypeInfo( 
    use = JsonTypeInfo.Id.NAME, 
    include = JsonTypeInfo.As.PROPERTY, 
    property = "type", 
    defaultImpl = Event.class, 
    visible = true) 
@JsonSubTypes({   
    @Type(value = SpecialEvent1.class, name = "SPECIAL_EVENT_1"), 
    @Type(value = SpecialEvent2.class, name = "SPECIAL_EVENT_2"), 
    }) 
public abstract class AbstractEvent { 

    private EventType type; 

    public EventType getType() { 
    return type; 
    } 

    public void setType(EventType type) { 
    this.type = type; 
    } 
} 

und die Enum:

public enum EventType { 
    SPECIAL_EVENT_1, 
    SPECIAL_EVENT_2, 
    EVENT; 
} 

Die Problem ist, dass dieser zweite Ansatz nicht funktioniert ... irgendeine Idee warum ??? kann ich Enum hier benutzen ???

Danke!

Antwort

13

Behoben!

Es funktioniert mit jackson 2.0 !!

+1

Scheint, wenn Sie nicht das Sichtbare auf wahr in diesem Fall stellen, wird es nicht funktionieren .... können Sie bestätigen? – Maxrunner

+0

Ich kann bestätigen, dass "sichtbar" muss "wahr" zu arbeiten. In meinem Fall habe ich auch 'include = JsonTypeInfo.As.EXISTING_PROPERTY' verwendet, um zu vermeiden, dass die Eigenschaft während der Serialisierung zweimal erscheint. –

Verwandte Themen