基于Enum的Jackson多态反序列化

时间:2013-04-11 09:36:26

标签: java json polymorphism jackson

我正在使用JacksonPolymorphicDeserialization,这是我的代码,它反序列化为基于'type'属性的正确类:

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

它完美地工作,我的json根据'type'值变成了预期的类。

但是,我正在考虑将'type'属性从String移动到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 EventType type;

    public EventType getType() {
    return type;
    }

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

和Enum:

public enum EventType {
    SPECIAL_EVENT_1,
    SPECIAL_EVENT_2,
    EVENT;
}

问题是第二种方法不起作用......任何想法为什么???我可以在这里使用Enum吗?

谢谢!

2 个答案:

答案 0 :(得分:17)

固定!

适用于jackson 2.0 !!

答案 1 :(得分:1)

它对我使用enum并具有以下功能:

@JsonTypeInfo(  
    use = JsonTypeInfo.Id.NAME,  
    include = JsonTypeInfo.As.EXISTING_PROPERTY,  
    property = "type",
    visible = true
) 

在这里,我使用com.fasterxml.jackson.annotation进行杰克逊注释。