39

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

@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' 属性从 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;
    }   
}

和枚举:

public enum EventType {
    SPECIAL_EVENT_1,
    SPECIAL_EVENT_2,
    EVENT;
}

问题是第二种方法不起作用……知道为什么吗???我可以在这里使用枚举吗???

谢谢!

4

2 回答 2

25

固定的!

它适用于杰克逊 2.0!

于 2013-04-11T10:32:41.483 回答
6

它对我使用 enum 和以下内容有用:

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

在这里,我正在使用com.fasterxml.jackson.annotationJackson Annotations。

于 2020-06-09T08:43:12.517 回答