我正在使用Jackson多态反序列化,这是我的代码,根据"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”属性从字符串更改为枚举,这是我的新代码:
@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;
}
问题在于第二种方法不起作用...有任何想法为什么???我可以在这里使用枚举吗???
谢谢!
visible
需要是true
才能生效。在我的情况下,我还使用了include=JsonTypeInfo.As.EXISTING_PROPERTY
,以避免属性在序列化过程中出现两次。 - Wim DeblauweEventType.SPECIAL_EVENT_1
代替字符串,这可行吗? - PhoneixS