2013-04-11 33 views
12
Ben JacksonPolymorphicDeserialization ile çalışıyorum

dayanarak, bu 'türü' özelliğinde merkezli uygun sınıfa deserializes benim kodudur: Mükemmel çalışıyorJackson Polimorfik Deserialization 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; 
    } 
} 

ve benim json dönüşür 'tip' değerine göre beklenen sınıf.

@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; 
    } 
} 

ve Enum:

Ancak, Enum dizesi 'type' mülkü taşımak düşünüyorum, bu benim yeni bu değişiklikle kodudur

public enum EventType { 
    SPECIAL_EVENT_1, 
    SPECIAL_EVENT_2, 
    EVENT; 
} 

Sorun şu ki bu ikinci yaklaşım çalışmıyor ... neden herhangi bir fikir ??? Enum'u burada kullanabilir miyim ???

Teşekkürler!

cevap

13

Sabit!

Jackson 2.0 ile çalışır!

+1

Görünürlüğü true değerine koymazsanız bu durumda işe yaramaz. Onaylayabilir misiniz? – Maxrunner

+0

'Görünüş'ün' çalışmak için doğru olması gerektiğini doğrulayabilirim. Benim durumumda da, serialization sırasında iki kez görünen özellikten kaçınmak için 'include = JsonTypeInfo.As.EXISTING_PROPERTY' kullanılır. –