当前位置: 首页 > 知识库问答 >
问题:

基于枚举的Jackson多态反序列化

笪智志
2023-03-14

我正在使用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;
    }   
}

和枚举:

public enum EventType {
    SPECIAL_EVENT_1,
    SPECIAL_EVENT_2,
    EVENT;
}

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

谢谢!

共有2个答案

璩俊雅
2023-03-14

它对我使用enum时起到了以下作用:

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

这里我使用的是com。fasterxml。杰克逊。注释,用于Jackson注释。

桂鑫鹏
2023-03-14

固定的

它适用于jackson 2.0!!

 类似资料:
  • 问题内容: 我正在尝试并且未能对Jackson 2.5.4的枚举进行反序列化,并且我不太清楚我的情况。我的输入字符串是驼峰式的,我想简单地映射到标准的Enum约定。 我也尝试了吸气剂,但没有成功,这是我在其他地方看到的一种选择。他们都炸毁了: 我究竟做错了什么? 问题答案: 编辑: 从Jackson 2.6开始,您可以在枚举的每个元素上使用以指定其序列化/反序列化值(请参见此处): (此答案的其余

  • 我正在尝试使用jackson-DataBind Objectmapper反序列化一个JSON字符串,其中包含一组枚举属性。当JSON中出现未在枚举中定义的未知属性时,就会发生这种情况。请在下面找到我正在使用的对象映射器配置。 但是,反序列化(ObjectMapper.ReadValue(jsonText,.class);)抛出此错误。“test”是要反序列化的JSON字符串中的未知属性。 Com.

  • 问题内容: 我正在使用JAVA 1.6和Jackson 1.9.9我有一个枚举 我添加了一个@JsonValue,这似乎可以将对象序列化为: 但是当我尝试反序列化时,我得到了 我在这里想念什么? 问题答案: 如果你希望将枚举类与其JSON表示完全脱钩,则@xbakesx指出的序列化器/反序列化器解决方案是一个很好的解决方案。 另外,如果你喜欢一个独立的解决方案,则基于·和·注释的实现会更方便。 因

  • 我使用的是JAVA 1.6和Jackson 1.9.9我有一个枚举 我添加了一个@jsonValue,这似乎完成了它将对象序列化为:

  • 问题内容: 我有一个下面的枚举: 我用控制器()返回枚举数组,Spring将其序列化为以下json字符串: 强迫Jackson像POJO一样序列化枚举的最佳方法是什么?例如: 我使用了不同的注释,但无法获得这样的结果。 问题答案: 终于我找到了解决方案。 我必须用注释枚举并实现自定义序列化程序:

  • 我对Jackson和类型层次结构有以下问题。我正在序列化一个类SubA,该类将扩展为一个字符串,然后尝试将其反序列化回来。当然,在编译时,系统不知道它是基还是SubA,因此我希望它是基,如果它是SubA,则会在编译后执行一些其他操作。 我的基本类看起来像: ...和一个派生自的类: ... 我试图执行以下代码: String是: 但我一次又一次地犯同样的错误。映射器现在知道如何处理另一个类参数-它